请实现一个函数用来找出字符流中第一个只出现一次的字符。
例如,当从字符流中只读出前两个字符 go
时,第一个只出现一次的字符是 g
。
当从该字符流中读出前六个字符 google
时,第一个只出现一次的字符是 l
。
如果当前字符流没有存在出现一次的字符,返回 #
字符。
数据范围
字符流读入字符数量 [0,1000][0,1000]。
样例
输入:"google"
输出:"ggg#ll"
解释:每当字符流读入一个字符,就进行一次判断并输出当前的第一个只出现一次的字符。
class Solution{
public:
//Insert one char from stringstream
string l;
queue<char> on;
map<char ,int > cnt;
void insert(char ch){
l+=ch;
cnt[ch]++;
if(on.empty())
on.push(ch);
if(ch==on.front())
{
on.pop();
for(auto i:l)
{
if(cnt[i]==1){
on.push(i);
break;
}
}
}
}
//return the first appearence once char in current stringstream
char firstAppearingOnce(){
if(on.empty())return '#';
char res=on.front();on.pop();
return res;
}
};