题目:
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
思路:
map保存字符和index,set保存index,当字符出现超过两次,set删除该index,返回set中第一个
代码:
class Solution {
public:
int FirstNotRepeatingChar(string str)
{
if(str.empty())
return -1;
map<char, int> map_char_index;
set<int> set_index;
for(int i=0; i<str.size(); i++)
{
char tmp = str[i];
map<char, int>:: iterator iter = map_char_index.find(tmp);
if(map_char_index.end() == iter)
{
map_char_index[tmp] = i;
set_index.insert(i);
}
else
{
set_index.erase(iter->second);
}
}
return set_index.empty() ? 0 : *(set_index.begin());
}
};