解题思路
使用单调队列优化,我们使用双端队列存储输入的字符,如果输入的字符个数大于1,那么我们就不用加入到队列中,并且这个时候队列中的元素需要删除,必须保证队头元素出现个数等于1,这里用一个while循环判断一下,队头元素大于1个话就出队。
使用长度为128的整型数组来统计字符出现个数。
class Solution {
int[] alpha = new int[128];
Deque<Character> queue = new LinkedList<>();
//Insert one char from stringstream
public void insert(char ch){
if(++alpha[ch] > 1){
while(!queue.isEmpty() && alpha[queue.getFirst()] > 1){
queue.removeFirst();
}
}else{
queue.addLast(ch);
}
}
//return the first appearence once char in current stringstream
public char firstAppearingOnce(){
return queue.isEmpty() ? '#' : queue.getFirst();
}
}