看到很多讨论代码中FirstAppearingOnce()方法中都是这样写的:
for(char ch : str) | for(int i=0;i<size;++i)
真的是... emmm...

【澄清】offer书上代码中occurrence[i]数组有两个作用,很是巧妙:

  1. 记录字符出现的次数;
  2. 记录字符出现的次数。

特此,我分别用两个数组来表示,如下:

public class Solution {

    int[] count = new int[256]; // 字符出现的次数
    int[] index = new int[256]; // 字符出现的次数
    int number = 0;

    public void Insert(char ch) {
        count[ch]++;
        index[ch] = number++;
    }

    public char FirstAppearingOnce() {
        int minIndex = number;
        char ch = '#';
        for (int i = 0; i < 256; i++) {  // !!!
            if (count[i] == 1 && index[i] < minIndex) {
                ch = (char) i;
                minIndex = index[i];
            }
        }
        return ch;
    }
}