char firstUniqChar(string s) { unordered_map <char,int>m; for(auto c:s){ if(m.find(c)==m.end()){ m.insert(pair<char,int>(c,1)); }else{ m[c]++; } } for(auto c:s){ if(m[c]==1){ return c; } } return NULL; }
注意几个事情:
①每次调用m[c]查找,若不存在就会自动插入,键名为c,值为0的数据。
②还要map插入可以看成是一个栈,后进的在遍历的时候会被先访问到。
优化过后的代码:
char firstUniqChar(string s) { unordered_map <char,int>m; for(auto c:s){ m[c]++; } for(auto c:s){ if(m[c]==1){ return c; } } return ' '; }