字符流中第一个不重复的字符:最直观的想法是,使用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 '#';
}