• 50-02 字符流中第一个不重复的字符( 时间空间效率的平衡)


    题目描述:

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

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

     

    测试用例:

    1)功能测试(读入一个字符,读入多个字符,读入的所有字符都是唯一的,读入的所有字符都是重复出现的)

    2)特殊输入测试(读入0个字符时)

    解题思路:

    1)使用哈希表

    class Solution
    {
    public:
        //定义构造函数
        Solution():index(0){
            for(int i=0;i<256;i++)
                occurrence[i]=-1;  //初始化为-1,表示还字符没有出现过
        }
      //Insert one char from stringstream
        void Insert(char ch)
        {
            if(occurrence[ch]==-1)
                 occurrence[ch]=index;
            else if(occurrence[ch]>=0)  //表示该字符已经出现过一次
                occurrence[ch]=-2;
            index++;
        }
      //return the first appearence once char in current stringstream
        char FirstAppearingOnce()
        {
            //如果字符流为空的时候
            char ch='#';  //认真读题,注意题目要求的返回值
            int minV = numeric_limits<int>::max();  //初始化为int能表示的最大值
            for(int i=0;i<256;i++){
                if(occurrence[i]>=0 && occurrence[i]< minV){
                    ch=char(i); //将ASCII码转为对应的字符
                    minV = occurrence[i];
                }
            }
            return ch;
        
        }
    private:
        int occurrence[256];
        int index;  //表示字符在字符流中的位置
    };
    

    std::numeric_limits为模板类,使用时需要添加头文件#include<limits>

    比较常用的使用是对于给定的基础类型用来判断在当前系统上的最大值、最小值。

    支持的基础算术类型包括如下


    2)其他一些方法,大多是将字符流存起来,string或者vector,然后寻找的时候遍历字符流的所有字符,判断哈希表或者map中字符出现的次数。无论是空间复杂度还是时间复杂度都比方法1高

  • 相关阅读:
    robotframework + python2.7.9 + selenium 2.44.0 + selenium2library1.7 测试环境搭建成功!
    SugarCRM安装踩雷(一)
    linux下安装xampp
    LoadRunner脚本回放与设置
    LoadRunner10自带的WEBTOURS,无法显示Flights页面问题解决办法
    重装系统后,重新搭建Selenium Server+Firefox环境
    LoadRunner 11中Record无法自动生成脚本——解决办法
    RFTWEB测试对象抓取的方法
    转载:如何使用RFT自动打开IE
    读《实战 GUI 产品的自动化测试》之:第四步,高阶技巧
  • 原文地址:https://www.cnblogs.com/GuoXinxin/p/10551673.html
Copyright © 2020-2023  润新知