题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。
例如,当从字符流中只读出前两个字符 go 时,第一个只出现一次的字符是 g。
当从该字符流中读出前六个字符 google 时,第一个只出现一次的字符是 l。
如果当前字符流没有存在出现一次的字符,返回 # 字符。
样例
样例
输入:"google"
输出:"ggg#ll"
解释:每当字符流读入一个字符,就进行一次判断并输出当前的第一个只出现一次的字符。
算法1
(暴力枚举) $O(n)$
C++ 代码
class Solution{
public:
//Insert one char from stringstream
unordered_map<char, int> hash;
queue<char> q;
void insert(char ch){
hash[ch]++;
if(hash[ch] > 1){
// while(q.size() && q.front() == ch) q.pop();// 这样写不行,因为可能队列中第二个字符当前时刻,数目也是大于1的。
while(q.size() && hash[q.front()] > 1) q.pop();
}
else q.push(ch);
}
//return the first appearence once char in current stringstream
char firstAppearingOnce(){
if(q.empty()) return '#';
else return q.front();
}
};