字符流中的第一个不重复的字符(思路与实现)

题目描述

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

思路:

其实这道题的主要思路就是利用一个数组,然后数组的下标就是这个字符对应的整数。这么进来一个字符,先吧这个字符放入一个Stringbuffer。就将判断该字符对应下标在数组中的值是否已经有,有就在基础上加一,如果没有,则直接置为1。之后将这个Stringbuffer转化为一个字符数组,那么这个数组就是进来的顺序,然后遍历这个数组,判断每一个字符在源数组中存的是否为1,只要找到第一个那么这个就是第一次出现一次的字符。

实现:

public class Solution {
    //主要的思想是利用一个数组,而且数组的下标就是该字符代表的整数
    //Insert one char from stringstream
    int[] hashTable = new int[256];//因为这个字符是由8位组成,所以这儿数组最大是256个
    StringBuffer buffer = new StringBuffer();
    public void Insert(char ch)
    {
        buffer.append(ch);
        if(hashTable[ch] == 0){
            hashTable[ch] = 1;
        }else{
            hashTable[ch] = hashTable[ch] + 1;
        }
    }
  //return the first appearence once char in current stringstream
    public char FirstAppearingOnce()
    {
        char[] temp = buffer.toString().toCharArray();
        for(char ch: temp){
            if(hashTable[ch] == 1){
                return ch;
            }
        }
        return '#';
    }
}

你可能感兴趣的:(算法,数据结构)