题目描述
请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"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 '#';
}
}