// 时间复杂度O(1),空间复杂度O(n)
    // 一个字符占8位,因此不会超过256个,可以申请一个256大小的数组来实现一个简易的哈希表,统计每个字符出现的次数。
    int[] counterMap = new int[256];

    // 用一个列表记录候选字符,插入时如果第一次遇到ch字符,则进入候选列表,否则删除。
    ArrayList<Character> cancidates =new ArrayList<Character>();

    //Insert one char from stringstream
    public void Insert(char ch) {
        counterMap[ch] += 1;
        // 第一个只出现一次的字符
        if(counterMap[ch] == 1){
            cancidates.add(ch);
        }else{
            cancidates.remove((Character) ch);
        }
    }

    //return the first appearence once char in current stringstream
    public char FirstAppearingOnce() {
        return cancidates.size()>0? cancidates.get(0):'#';
    }