思路:
1、map保存字符出现次数
2、queue保证字符顺序
3、优化只有第一次出现的字符才入队
import java.util.Queue;
import java.util.LinkedList;
import java.lang.Character;
import java.util.HashMap;
import java.util.Map;
public class Solution {
//map来保存出现次数
Map<Character,Integer> countMap = new HashMap<>();
//queue来取出第一个不重复的字符
Queue<Character> queue = new LinkedList<>();
public void Insert(char ch)
{
Integer count = countMap.get(ch);
if(count==null){
countMap.put(ch,1);
queue.offer(ch);//小优化一下,只有第一次出现的才放到队列里
}else{
countMap.put(ch,++count);
}
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce()
{
Character first = null;
while(!queue.isEmpty()){
first = queue.peek();
//看看队首字符是否满足需求
if(countMap.get(first)==1){
return first;
}else{
//出队,以后永远没用了,看下一个字符
queue.poll();
}
}
//出队完毕没找到,返回#
return '#';
}
} 
京公网安备 11010502036488号