剑指offer50b 字符流中第一个只出现一次的字符
import java.util.HashMap; public class Solution { private int[] map = new int[256]; private int index=1; //Insert one char from stringstream public void Insert(char ch) { if(map[ch]==0) map[ch]=index; else if(map[ch]>0) map[ch]=-1; index++; } //return the first appearence once char in current stringstream public char FirstAppearingOnce() { int min = Integer.MAX_VALUE; char ans='#'; for(int i=0;i<map.length;i++){ if(map[i]>0&&map[i]<min) { min = map[i]; ans = (char)i; } } return ans; } }
运行时间:23ms
占用内存:9588k
256的int数组map与charASCII码一一对应,存储其出现的位置index。
index从1开始计数。int数组初始值为0。
如果之前没有出现过,则map[i]==0;
如果出现过一次,map[i]是一个大于零的数(其唯一一次出现的位置);
如果出现过多次,则将map[i]设为-1。
最后遍历一遍找大于0最小的那个输出即可。

浙公网安备 33010602011771号