52.字符流中第一个只出现一次的字符
请实现一个函数用来找出字符流中第一个只出现一次的字符。
例如,当从字符流中只读出前两个字符 go 时,第一个只出现一次的字符是 g。
当从该字符流中读出前六个字符 google 时,第一个只出现一次的字符是 l。
如果当前字符流没有存在出现一次的字符,返回 # 字符。
数据范围:
字符流读入字符数量 [0,1000]。
样例:
输入:"google"
输出:"ggg#ll"
解释:每当字符流读入一个字符,就进行一次判断并输出当前的第一个只出现一次的字符。
代码:
class Solution {
//使用哈希表统计每个字符的出现次数
Map<Character,Integer>mp = new HashMap<>();
//使用队列维护字符的插入顺序,用于快速查找第一个唯一字符
Queue<Character>q = new LinkedList<>();
//Insert one char from stringstream
public void insert(char ch){
//更新字符出现次数,如果字符已存在则计数+1,否则初始化为1
mp.put(ch,mp.getOrDefault(ch,0)+1);
//将字符加入队列尾部,保持插入顺序
q.offer(ch);
}
//return the first appearence once char in current stringstream
public char firstAppearingOnce(){
//移除队列头部所有出现次数>1的字符
while(!q.isEmpty()&&mp.get(q.peek())>1)q.poll();
//检查队列是否为空,如果为空,说明没有不重复的字符,返回'#'
if(q.isEmpty())return '#';
//否则返回当前队列头部的第一个唯一字符
else return q.peek();
}
}

浙公网安备 33010602011771号