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