[剑指Offer] 54.字符流中的第一个不重复的字符

题目描述

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 

输出描述:
如果当前字符流没有存在出现一次的字符,返回#字符。

【思路】可以发现,出现的字符 和 它的出现的次数 是一种对应关系,自然联想到 哈希表key-value 这种对应,或者应用关联容器 map,可以很方便的解决这个问题。map 容器中,它的一个元素 就是一组(key,value)对应的数据

 1 class Solution
 2 {
 3 public:
 4   //Insert one char from stringstream
 5     void Insert(char ch)
 6     {
 7         Vec.push_back(ch);
 8         Map[ch]++;
 9     }
10   //return the first appearence once char in current stringstream
11     char FirstAppearingOnce()
12     {
13         for(vector<char>::iterator iter = Vec.begin();iter != Vec.end();iter ++){
14             if(Map[*iter] == 1)
15                 return *iter;
16         }
17         return '#';
18     }
19     vector<char> Vec;
20     unordered_map<char,int> Map;
21 };

 

posted @ 2017-03-16 18:23  Strawberry丶  阅读(158)  评论(0编辑  收藏  举报