給定一個字串,找到它的第一個不重復的字符,并回傳它的索引。如果不存在,則回傳 -1。
示例:
s = "leetcode" 回傳 0
s = "loveleetcode" 回傳 2
我下面的方法哪里有問題,為什么回傳結果不對?
class Solution {
public:
int firstUniqChar(string s) {
unordered_map <char, int> temp;
for(int i = 0; i < s.size(); i++)
{
char k = s[i];
if(temp.find(k) == temp.end()) //如果沒找到,添加新字符與其索引;
{
temp[k] = i;
}
else if(temp[k] >= 0 ) //如果找到了,且值不為-1,就把對應字符的值改為-1,方便之后排除;
{
temp[k] = -1;
}
}
for(auto aa : temp)
{
if(aa.second >= 0) //只要順序尋找存在不為-1的,就可以回傳。
{
return aa.second;
}
}
return -1;
}
};
uj5u.com熱心網友回復:
unordered_map 是亂序,map有序。uj5u.com熱心網友回復:
不是這個原因,改成map,結果還是不對。uj5u.com熱心網友回復:
這里是有問題的。這里是恒成立的因為你存的是索引。真正用來判斷的,是字符出現的次數,你的代碼沒有把次數統計進來
else if(temp[k] >= 0 ) //如果找到了,且值不為-1,就把對應字符的值改為-1,方便之后排除;
{
temp[k] = -1;
}
uj5u.com熱心網友回復:
這里是有問題的。這里是恒成立的因為你存的是索引。真正用來判斷的,是字符出現的次數,你的代碼沒有把次數統計進來
else if(temp[k] >= 0 ) //如果找到了,且值不為-1,就把對應字符的值改為-1,方便之后排除;
{
temp[k] = -1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/16296.html
標籤:C++ 語言
