class Solution {
  public:
    // 哈希表,来一个字符,检查哈希表是否存在,
    // 不存在表示第一次出现则直接放入并设置成其下标表示只出现一次,若存在则把哈希表设置成-1表示出现过了
    // 在获得第一次出现时,遍历哈希表

    unordered_map<char, int> mp;
    int i = 0; //recorder the index of current sign

    //Insert one char from stringstream
    void Insert(char ch) {
        if (mp.find(ch) != mp.end()) { //found
            mp[ch] = -1; //mark
        } else { //not found
            mp[ch] = i;
        }

        i++;
    }

    //return the first appearence once char in current stringstream
    char FirstAppearingOnce() {
        char ans = '#';   //store anwser
        int index = -1; //compare
        for(auto p:mp){
            if(p.second != -1){ //means is
                if(index == -1){    //initailize
                    ans = p.first;
                    index = p.second;
                }else{
                    if(p.second < index){   //come first
                        ans = p.first;
                        index = p.second;
                    }
                }
            }
        }

        return ans;
    }

};