• 【剑指Offer】54、字符流中第一个不重复的字符


      题目描述:

      请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。

      输出描述:

      如果当前字符流不存在只出现一次的字符,返回“#”字符。

      解题思路:

      本题还是相当简单的,有点类似于第34题:第一个只出现一次的字符,只不过本题是字符流序列。解题思路也比较类似,将字节流保存起来,通过哈希表统计每个字符出现的次数,然后再从头遍历字符流,找到第一个次数为1的字符,就是我们要找的目标。

      这里,为了简单,可以用数组代替哈希表,将字符的ASCLL码作为数组下标,字符对应出现的次数作为数组的元素进行保存。

      编程实现(Java):

    public class Solution {
        /*
        思路:用hashmap保存每个字符出现的次数 或者 用长度为256的数组代替哈希表
        还有一种是使用indexof和lastIndexof
        */
        String str="";
        int[] charToCount=new int[256]; //256个字符
        //Insert one char from stringstream
        public void Insert(char ch)
        {
            str+=ch;
            charToCount[ch]+=1;
        }
      //return the first appearence once char in current stringstream
        public char FirstAppearingOnce()
        {
            for(int i=0;i<str.length();i++){
                char c=str.charAt(i);
                if(charToCount[c]==1)
                    return c;
            }
            return '#';
        }
    }
    
  • 相关阅读:
    Mybatis查询select操作
    插入排序和它的进化希尔排序
    关于c头文件的使用的小记录
    Mybatis介绍
    spring tool suite开发环境搭建
    一个简单的jsp+servlet登录界面的总结
    纠正关于线程的错误理解
    表达式语言EL简单学习
    [BZOJ 1804] Flood
    [POJ 1739] Tony's Tour
  • 原文地址:https://www.cnblogs.com/gzshan/p/10880175.html
Copyright © 2020-2023  润新知