轻车熟路

字符流中第一个不重复的字符

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 '#';
        
    }
}



全部评论

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务