首页 > 其他分享 >剑指offer 字符流中第一个不重复的字符(思维,队列)

剑指offer 字符流中第一个不重复的字符(思维,队列)

时间:2022-12-12 19:32:48浏览次数:40  
标签:字符 ch offer 队列 流中 char mv


题目描述

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"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

相关文章