请实现一个函数用来找出字符流中第一个只出现一次的字符。
例如,当从字符流中只读出前两个字符 go 时,第一个只出现一次的字符是 g。
当从该字符流中读出前六个字符 google 时,第一个只出现一次的字符是 l。
如果当前字符流没有存在出现一次的字符,返回 # 字符。
样例
输入:“google”
输出:“ggg#ll”
解释:每当字符流读入一个字符,就进行一次判断并输出当前的第一个只出现一次的字符。
算法:
用哈希表统计所有字符出现的次数;
用一个队列维护字符流,队头前边的字符出现多次的话就可以删掉了,保持队头元素是第一次出现且只出现一次的字符;
当队列为空时无解;
class Solution{
public:
unordered_map<char,int> hash;
queue<char> q;
int i = 0;
void insert(char ch){
hash[ch]++;
q.push(ch);
while(q.size() && hash[q.front()] > 1) q.pop();
}
char firstAppearingOnce(){
if(q.size()) return q.front();
return '#';
}
};