题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
解题思路:
容易想到用队列来存储返回字符,但是一旦字符出现2次,我们总不能又把队列重新扔出来再扔回去(其实可以,复杂度同样是常数),这里我们可以用一个小技巧,每次检查队列的首个元素时,我们可以检查它的重复出现次数,若出现多于1次,我们就pop队列。
class Solution
{
public:
//Insert one char from stringstream
queue<char> q;
vector<int> mv;
Solution(){
mv.assign(256,0);
}
void Insert(char ch)
{
mv[ch]++;
if(mv[ch]<=1)q.push(ch);
}
//return the first appearence once char in current stringstream
char FirstAppearingOnce()
{
while(q.size() && mv[q.front()]>=2)q.pop();
if(q.size())return q.front();
else return '#';
}
};
标签:字符,ch,offer,队列,流中,char,mv From: https://blog.51cto.com/u_15910522/5931550