这道题目思路很简单,遍历,并将s中的字符存在unordered_map中,然后依次匹对其出现次数。若有1,则返回i,否则返回-1
#include <iostream>
#include <unordered_map>
using namespace std;
class Solution {
public:
public:
int firstUniqChar(string s) {
unordered_map<char,int> um;
for(char ch : s)
++um[ch];
for(int i = 0; i < s.size();i++){
if(um[s[i]] == 1)//这里要尤其注意,在存入um中时,并不是按照字符出现的顺序存储的,//所以字符在um中的顺序是随机的。因此在遍历匹对是,用s[i]来匹对更为合适,如果直接用for(char ch : um),是不对的 return i;
}
return -1;
}
};
int main() {
Solution so;
string s = "leetcode";
cout << so.firstUniqChar(s) << endl;
system("pause");
return 0;
}
本文介绍了一种通过遍历字符串并将字符存储于unordered_map中,以查找首个唯一字符的方法。利用C++实现,该算法首先统计每个字符的出现次数,然后再次遍历字符串以找到第一个出现次数为1的字符。
494

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



