import java.util.*; public class Solution { //Insert one char from stringstream //思路: // 插入时: // 建一个map,用来存放每个字符出现的次数。建一个队列Queue用来按顺序存放每个字符 //有一个条件是,当一个字符之前已经出现过,则对map中这个字符的个数加1。同时,对于队列因为已经存在了 //故不需要添加这个字符。 // 取出时: // 查看队列头的元素。在map中对比它的次数是否为1.如果为1,则直接返回这个字符。 //否则弹出队列头元素,继续下一个判断。 // 直到队列为空 HashMap<Character,Integer> map = new HashMap<>(); Queue<Character> queue = new LinkedList<>(); public void Insert(char ch) { if(!map.containsKey(ch)){ queue.offer(ch); map.put(ch,1); }else{ int num = map.get(ch)+1; map.put(ch,num); } } //return the first appearence once char in current stringstream public char FirstAppearingOnce() { while(!queue.isEmpty()){ char head = queue.peek(); if(map.get(head)==1){ return head; }else{ queue.poll(); continue; } } return '#'; } }