轻车熟路
字符流中第一个不重复的字符
http://www.nowcoder.com/questionTerminal/00de97733b8e4f97a3fb5c680ee10720
思路:
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 '#'; } }