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