轻车熟路

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

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



全部评论

相关推荐

看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务