算法1
(数组自制哈希表)
用数组做成哈希表,每次插入一个新的数值,如果这个位置是-1,就说明该数值第一次出现,将这个数值出现的位置赋给这个位置,如果下次插入同样的值,就赋给它-2,后面的判断会用到
每插入一个新的值没救要循环整个哈希表,如果位置上的值是-1说明没有出现过,如果是-2,说明重复了,所以,设置第一个条件是>=0,然后在判断不<0的位置上,找到出现位置最早的那个字符,输出即可,如果没有满足的,则输出’#’.
java 代码
class Solution {
private int index;
private int[] occ;
public Solution(){
index = 0;
occ = new int[256];
for(int i = 0; i <256;i++){
occ[i] = -1;
}
}
//Insert one char from stringstream
public void insert(char ch){
if(occ[(int)ch]==-1){
occ[(int)ch]=index;
}else if(occ[(int)ch]>=0){
occ[(int)ch]=-2;
}
index++;
}
//return the first appearence once char in current stringstream
public char firstAppearingOnce(){
int minIndex = Integer.MAX_VALUE;
char ch = '#';
for(int i = 0 ;i<256;i++){
if(occ[i]>=0&&occ[i]<minIndex){
ch = (char)i;
minIndex = occ[i];
}
}
return ch;
}
}