剑指offer 50 举一反三 字符流中第一个不重复的字符

题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。

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

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

思路:

因为字符只能一个接一个从字符流中读出来。可以定义一个数据容器或者string字符串来保存字符在字符流中的位置。

用哈希表计算字符串中每个字符出现的次数。

代码如下:

class Solution
{
public:
  //Insert one char from stringstream
   
    string str;
    void Insert(char ch)
    {    
         str+=ch;
    }
  //return the first appearence once char in current stringstream
    char FirstAppearingOnce()
    {  
        map<char,int>count;//利用STL中的map或者自己定义一个简单的哈希表char count[256]={0}
        for(int i=0;i<str.size();i++)
             count[str[i]]++;
        for(int j=0;j<str.size();j++)
        {
            if(count[str[j]]==1)
                return str[j];
        }
          return '#';
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_41413441/article/details/80663161