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

    题目描述

    请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。
    输出描述:
    如果当前字符流没有存在出现一次的字符,返回#字符。
    思路:开始以为这一道题有很流弊的解法,把自己想的unordered_map的方法放在一边,其实就是使用一个256大的数组模拟哈希就行了,每次插入记得统计目前该字符有多少个了,然后遍历一边这个vector,就可以找到第一个出现的。不过需要注意只对一个类进行操作。
    自己的错误点还是很多的:首先是
    1)在类里面vector<int> v(10),直接声明10个元素大小的数组是错误的,必须使用=或者{},vector<int> v = vector<int> (10,0);
    2)这个是思维上的漏洞错误:看第7行的for循环,这个类有一个string,vector,每次插入一个字符,vector都从0开始统计字符串,比如g,v[g] = 1,然后插入一个o,统计的时候还是从string的0位置开始,即v[g] = 2,这个就是自己的思维错误了,应该每次进入for循环统计前都需要将数组置为0.
    当然最简单的方法是每次插入的时候就直接统计出现次数,这样可以控制字符第一次出现的时候才 进行统计。
     1 class Solution{
     2 public:    
     3     void Insert(char ch){
     4         src.insert(src.end(),ch);
     5     } 
     6     char FirstAppearingOnce(){
     7         for(int i = 0;i < src.size();++i){//这里出错
     8             ++v[src[i]];
     9         }
    10         for(int i = 0;i < src.size();++i){
    11             if(v[src[i]] == 1){
    12                 return src[i];
    13             }
    14         }
    15         return '#';
    16     }
    17 private:
    18     vector<int> v = vector<int> (256);
    19     string src;   
    20  };

    标准答案:

    class Solution{
    public:
      //Insert one char from stringstream     
        void Insert(char ch){
            src.insert(src.end(),ch);
            ++v[ch];
        }
      //return the first appearence once char in current stringstream
        char FirstAppearingOnce(){      
            for(int i = 0;i < src.size();++i){
                if(v[src[i]] == 1){
                    return src[i];
                }
            }
            return '#';
        }
    private:
        vector<int> v = vector<int> (256,0);
        string src;    
    };
  • 相关阅读:
    单例模式 (线程安全)
    Hystrix (容错,回退,降级,缓存)
    Feign负载均衡
    Ribbon远程调用
    Eureka服务注册与发现
    适配器模式
    docker学习(二)
    使用Eclipse进行远程调试(转)
    docker学习(一)
    Mysql批量更新的一个坑-&allowMultiQueries=true允许批量更新(转)
  • 原文地址:https://www.cnblogs.com/dingxiaoqiang/p/8295502.html
Copyright © 2011-2022 走看看