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

题目描述

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

输出描述:

如果当前字符流没有存在出现一次的字符,返回#字符。



思考: 要想得到字符流中第一个只出现一次的字符,如果想要得到只出现一次的字符,简单,用HashMap, 字符作为Key,出现次数作为 value,
可是第一个怎么办? HashMap存储数据是无序的!! 按照字符的输入字符的顺序进行遍历
public class Solution {
    private int[] count=new int[256];
    StringBuilder sb=new StringBuilder();
    HashMap<Character,Integer> map=new HashMap<>();
    //Insert one char from stringstream
    public void Insert(char ch)
    {
        if(map.containsKey(ch))
            map.put(ch,2);
        else
            map.put(ch,1);
        sb.append(ch);
    }
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        String str=sb.toString();
        for(int i=0;i<str.length();i++){
            if(map.get(str.charAt(i))==1)
               return str.charAt(i);
        }
        return '#';
    }
}

那么,可以直接用 数组啊!!!  数组下标就是 hash.

public class Solution {
    private int[] arr=new int[256];
    private StringBuilder sb=new StringBuilder();
    //Insert one char from stringstream
    public void Insert(char ch)
    {
        int index=ch-'0';     
        arr[index]++;
        sb.append(ch);
    }
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        String str=sb.toString();
        for(int i=0;i<str.length();i++){
            if(arr[str.charAt(i)-'0']==1)
                return str.charAt(i);
        }
        return '#';
    }
}

正确版!!   应该用 '/0'   而不是 ’0‘

public class Solution {
    private int[] arr=new int[256];
    private StringBuilder sb=new StringBuilder();
    //Insert one char from stringstream
    public void Insert(char ch)
    {
        int index=ch-'\0';
        arr[index]++;
        sb.append(ch);
    }
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        String str=sb.toString();
        for(int i=0;i<str.length();i++){
            if(arr[str.charAt(i)-'\0']==1)
                return str.charAt(i);
        }
        return '#';
    }
}

 

 
posted @ 2020-07-15 18:42  你眼里的星辰  阅读(59)  评论(0)    收藏  举报