请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
如果当前字符流没有存在出现一次的字符,返回#字符。
public class Solution {
//字符char长度为8,共有256种可能性
int[] list = new int[256];
int index;
public Solution() {
for (int i = 0; i < 256; i++) {
list[i] = -1;
}
index = 0;
}
//Insert one char from stringstream
public void Insert(char ch) {
if (list[ch] == -1) {//第一次出现,index从小到大为出现的顺序
list[ch] = index;
} else if (list[ch] >= 0) {
list[ch] = -2;
}
index++;
}
//return the first appearence once char in current stringstream
public char FirstAppearingOnce() {
char ch = '#';
int minIndex = Integer.MAX_VALUE;
for (int i = 0; i < 256; i++) {
if (list[i] >= 0 && list[i] < minIndex) {
ch = (char) i;
minIndex = list[i];
}
}
return ch;
}
}