Leetcode链接: link.

第一种方法思路:
- 题目描述“假定该字符串只包含小写字母”,所以直接开辟一个数组,用来计数统计每个字母出现的次数
- 在从头开始遍历,找到那个首先只出现一次的字母,然后返回索引
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;
}
};

第二种方法思路:
-
分别对字符串进行正序查询和反序查询
-
如果所查询的字符下标相等,说明此字符只出现了一次
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;
}
};
本文介绍了解决LeetCode中寻找字符串中首个唯一出现的字符问题的三种方法:使用计数数组、正反查询比较及哈希映射。通过不同算法思路对比,帮助读者理解并掌握高效解题技巧。

258

被折叠的 条评论
为什么被折叠?



