剑指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最小的那个输出即可。

posted @ 2019-02-28 21:54  大胖子球花  阅读(78)  评论(0)    收藏  举报