Leetcode第387题---字符串中的第一个唯一字符

本文介绍了解决LeetCode中寻找字符串中首个唯一出现的字符问题的三种方法:使用计数数组、正反查询比较及哈希映射。通过不同算法思路对比,帮助读者理解并掌握高效解题技巧。

Leetcode链接: link.

在这里插入图片描述
第一种方法思路

  1. 题目描述“假定该字符串只包含小写字母”,所以直接开辟一个数组,用来计数统计每个字母出现的次数
  2. 在从头开始遍历,找到那个首先只出现一次的字母,然后返回索引
class Solution {
public:
    int firstUniqChar(string s) {
        int count[26] ={0};
        //首先使用计数的思想,把里面的字母都算出来多少个,然后在考虑哪一个字母是第一个的问题
        for(auto ch : s)
        {
            count[ch - 'a']++;
        }
        //此时已经知道了每个字母有多少个,再找第一个出现一次的
        for(size_t i = 0;i<s.size();i++)
        {
            if(count[s[i] - 'a'] == 1)
            {
                return i;
            }
        }
        return -1;
    }
};

在这里插入图片描述

第二种方法思路

  1. 分别对字符串进行正序查询和反序查询

  2. 如果所查询的字符下标相等,说明此字符只出现了一次

class Solution {
public:
    int firstUniqChar(string s) {
        for(int i=0; i<s.size(); ++i)
        {
            int index = s.find(s[i]);
            int reverse_index = s.rfind(s[i]);  
            if(index == reverse_index)
                return i;
        }
    return -1;
  }
};

在这里插入图片描述
第三种解题思路:
hash映射,把每一个字符都放在数组中对应的位置,在遍历整个字符串。(但是这个方法还需要在继续学习,后续会添加解题的具体思路)

class Solution {
public:
    int firstUniqChar(string s) {
        int hash[256] = {0};
        for(auto ch : s)
        {
            hash[ch]++;
        }

        for(size_t i = 0;i<s.size();++i)
        {
            if(hash[s[i]] == 1)
            {
                return i;
            }
        }
        return -1;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值