zoukankan      html  css  js  c++  java
  • 剑指offer 字符流中第一个不重复的字符

    题目描述

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

    输出描述:

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

    本题错误的地方:1、字符串末尾插入一个char字符;string.push_back().append(),操作的都是字符串类型,不能操作char,要想实现插入char类型,
    使用insert,string.insert(position,number,target),position代表插入的字符位置,number是插入的个数,target代表插入的字符char。
    2、使用unordered_map需要注意,下标操作时,map[i]得到的结果就是value值,不要写成map[i] -> second,只有iteration迭代器操作才使用first,second。

    3、题目要求第一次出现的字符,所以每次找到字符之后都必须要将查找位置置为初始位置。
    class Solution
    {
    public:
      //Insert one char from stringstream
        void Insert(char ch){       
             s.insert(s.size(),1,ch);
             ++hashMap[ch];
        }
      //return the first appearence once char in current stringstream
        char FirstAppearingOnce(){
            for(int i = 0;i < s.size();++i){
                if(hashMap[s[i]] == 1){
                    char tmp = s[i];
                    i = 0;
                    return tmp;
                }
            }
            return '#';
        }
    private:
        string s;
        unordered_map<char,int> hashMap;
    };

     private必须是class里面的成员函数可以直接访问,或者友元函数可以直接访问。








  • 相关阅读:
    2020软件工程作业02
    第一次作业
    伪造IP
    Windows 上安装metasploit
    Kali安装 Typora
    在linux系统中安装调用汉语打字软件
    2020 年 10 月 10 日跑步随想
    最长公共前缀
    N皇后
    一道有趣的异步题
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/7508852.html
Copyright © 2011-2022 走看看