【剑指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 '#';
    }
}
posted @ 2019-05-17 10:55  gzshan  阅读(1228)  评论(0编辑  收藏  举报