字符流中第一个不重复的字符:最直观的想法是,使用map存储当前字符以及其出现的次数,然后再遍历一次字符串,找出只出现一次的字符并返回,若没有则返回#,两次遍历字符串可以保证字符是按照先后顺序出现的。该题将插入字符和查找第一个只出现一次的字符这两者分开了,故遍历一次字符串即可。注意map可以直接map[键]=值的喔,这样可以简化运算!
// <字符,出现的次数>
unordered_map<char,int> umap;
// 输入的字符串
string s;
//Insert one char from stringstream
void Insert(char ch)
{
// 插入字符
s+=ch;
// 字符出现的次数加一
umap[ch]++;
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce()
{
for(int i=0;i<s.size();i++)
// 找到只出现一次的字符并返回
if(umap[s[i]]==1)
return s[i];
// 否则返回#
return '#';
}



京公网安备 11010502036488号