class Solution {
public:
int firstUniqChar(string s) {
int idx = s.size();
map<int, pair<int, int>> mp;
for (int i = 0; i < s.size();i++) {
mp[s[i]].first++;
mp[s[i]].second = i;
}
for (auto &a : mp) {
if (a.second.first == 1) idx=min(a.second.second,idx);
}
return idx == s.size() ? - 1:idx;
}
};
/*
// not make sure that count(key)==1 is the first uniqchar in s// maybe multiset can not make the input order ,and so as unordered_multiset
char ch;
unordered_multiset<char> mt;
for(char c :s){
mt.insert(c);
}
for(char c:mt){
if(mt.count(c) == 1){
ch = c; break;
}
}
return s.find_first_of(ch);
*/
/*
//Error! "cc" -1 but output 1
class Solution {
public:
int firstUniqChar(string s) {
for(int i = 0; i<s.size();i++){
if (s.rfind(s[i]) == i) return i;
}
return -1;
}
};
*/