题解 | #字符流中第一个不重复的字符#

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

http://www.nowcoder.com/practice/00de97733b8e4f97a3fb5c680ee10720

用一个数组记录一下各个字符出现次数,然后用队列来存一下上一个走了该由谁来接替,所以的字符进一次出一次队列,所以算法时间复杂度为O(N);

    public void Insert(char ch)
    {
        //所有字符都在第一次来的时候进队列,换的时候将不为1次的全部弹出
        if(++charOccurs[ch]==1){
            occurOnes.add(ch);
        }
        if(curFirstAppear==null||curFirstAppear==ch){
            //换一个
            while(!occurOnes.isEmpty()&&charOccurs[occurOnes.peek()]!=1){
                occurOnes.poll();//不为1的全弹出去
            }
            curFirstAppear = occurOnes.isEmpty()?null:occurOnes.poll();
        }
    }
  //return the first appearence once char in current stringstream
    Queue<Character> occurOnes = new LinkedList<>();
    Character curFirstAppear = null;
    int[] charOccurs = new int[256];
    public char FirstAppearingOnce()
    {
        return curFirstAppear==null?'#':curFirstAppear;
    }
waigo的刷题之路 文章被收录于专栏

收录平时刷题的题解

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务