使用Unordered_map c ++的字符串中的第一个唯一字符

时间:2016-09-21 06:59:18

标签: c++ string unordered-map

我试图在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。我在代码中找不到错误。请帮助我理解这个错误。

1 个答案:

答案 0 :(得分:4)

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;
}