我正在尝试使用c ++中的unordered_map查找字符串的第一个唯一字符。LeetCodeProblem我的代码:
int firstUniqChar(string s) {
unordered_map<char,int> m;
for(int i=0;i<s.length();i++){
m[s[i]]++;
}
unordered_map<char,int>::iterator mit;
for(mit=m.begin();mit!=m.end();mit++){
if(mit->second ==1)
for(int i=0;i<s.length();i++){
if(mit->first == s[i])
return i;
}
}
return -1;
}
输出不正确。如果我尝试在Eclipse中调试它,则无法解析unordered_map。我在代码中找不到错误。请帮助我理解该错误。
unordered_map
不能确保元素按插入顺序存储。因此,当您遍历它时,不能保证第一个元素为second
1的第一个唯一字符必须是它。
您应该改为遍历字符串:
int firstUniqChar(string s) {
unordered_map<char,int> m;
for(int i=0;i<s.length();i++){
m[s[i]]++;
}
for (int i = 0; i < s.length(); i++){
if (m[s[i]] == 1) {
return i;
}
}
return -1;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句