题目要求:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
题目其实是对字符有两个要求:1.不重复;2.第一个;
不重复可以用哈希表来实现,第一个用队列来实现。
如果队列队首元素的哈希表值是1,那就是它了,如果不是,那就队首出队,检验下一个元素。
这里循环的长度是哈希表的长度,因为哈希表的长度必然小于等于队列的长度,而且也够用了。
队列没有top函数,是用front和back来返回队首和队尾的元素。
class Solution
{
public:
map<char,int> temp;
queue<char> cnt;
//Insert one char from stringstream
void Insert(char ch)
{
cnt.push (ch);
temp[ch]++;
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce()
{
int len=temp.size ();
for(int i=0;i<len;++i)
{
if(temp[cnt.front ()]==1)
return cnt.front ();
else
cnt.pop();
}
return '#';
}
};