在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例:
s = “abaccdeff”
返回 “b”s = “”
返回 " "
解法一:
哈希实现:

code:
char firstUniqChar(string s)
{
unordered_map<int, int> counts;
for (char x : s)
{
counts[x]++;
}
for (int i = 0; i < s.size(); i++)
{
if (counts[s[i]] == 1)
{
return s[i];
break;
}
}
return ' ';
}
解法二:
利用string中的find()和rfind()函数
code
char firstUniqChar(string s)
{
for (char x: s)
{
if (s.find(x) == s.rfind(x)) return x;
}
//string中find()函数是从左往右查找第一个字符/字符串出现的位置(下标)
//rfind()函数是从右往左查找第一个字符/字符串出现的位置(下标)
return ' ';
}
解法三:
使用常性的辅助数组来解决,可以认为空间复杂度为O(1)
code:
char firstUniqChar(string s)
{
int arr[256] = { 0 };
for (char x : s)
{
arr[x]++;
}
for (char x : s)
{
if (arr[x] == 1)
{
return x;
}
}
return ' ';
}
这篇博客介绍了三种不同的算法来找到字符串中第一个只出现一次的字符。第一种是使用哈希表,第二种利用了string的find()和rfind()函数,第三种方法是通过辅助数组实现。每种方法都有效地解决了问题,并且具有不同的时间和空间复杂度特性。

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



