剑指offer 字符流中第一个不重复的字符
题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。
本题错误的地方:1、字符串末尾插入一个char字符;string.push_back().append(),操作的都是字符串类型,不能操作char,要想实现插入char类型,
使用insert,string.insert(position,number,target),position代表插入的字符位置,number是插入的个数,target代表插入的字符char。
2、使用unordered_map需要注意,下标操作时,map[i]得到的结果就是value值,不要写成map[i] -> second,只有iteration迭代器操作才使用first,second。
3、题目要求第一次出现的字符,所以每次找到字符之后都必须要将查找位置置为初始位置。
class Solution { public: //Insert one char from stringstream void Insert(char ch){ s.insert(s.size(),1,ch); ++hashMap[ch]; } //return the first appearence once char in current stringstream char FirstAppearingOnce(){ for(int i = 0;i < s.size();++i){ if(hashMap[s[i]] == 1){ char tmp = s[i]; i = 0; return tmp; } } return '#'; } private: string s; unordered_map<char,int> hashMap; };
private必须是class里面的成员函数可以直接访问,或者友元函数可以直接访问。