AcWing 64. 字符流中第一个只出现一次的字符
原题链接
困难
作者:
adamXu
,
2020-10-01 12:25:34
,
所有人可见
,
阅读 424
class Solution{
public:
unordered_map<char,int> cnt;
queue<char> q;
//Insert one char from stringstream
void insert(char ch){
//最先出现的字符必然先插入的字符,故而我们可以考虑使用双指针,一个指针指向最开头元素、
//另外一个指向当前插入的字符,可以采用队列的数据结构。
//具体步骤如下,将当前插入的字符与队头字符cnt比较,如果当前字符已出现过,弹出队头,处理
//下一个元素,时间复杂度为On
if(++cnt[ch] > 1){
while(q.size() && cnt[q.front()] > 1) q.pop();
}
else q.push(ch);
}
//return the first appearence once char in current stringstream
char firstAppearingOnce(){
if(q.empty()) return '#';
return q.front();
}
};