• 字符流中第一个不重复的字符


    题目描述

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

    输出描述:

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

    看着题有点眼熟,因为前面做过了,字符串中第一个不重复的字符。

    差别就是字符流是一个一个读出的;例如:google  题目为字符串则输出 l      题目为字符流则输出ggg#ll   每读入一个新的字符相当于一个新的字符串来判断

    代码:

    class Solution
    {
    public:
        int arr[258];
        int index = 0;
        Solution()
        {
            for(int i = 0;i < 256;i++)
                arr[i] = -1;
        }
      //Insert one char from stringstream
        void Insert(char ch)
        {
             if(arr[ch] == -1)
                 arr[ch] = index;
            else
                arr[ch] = -2;
            index++;
        }
      //return the first appearence once char in current stringstream
        char FirstAppearingOnce()
        {
            int res = index+1;
            char ch = '';
            for(int i = 0; i < 256;i++)
            {
                if(arr[i] != -1 && arr[i] != -2)
                {
                    if(arr[i] < res)
                    {
                        res = arr[i];
                        ch = (char)i;
                    }
                }
            }
            if(res == index+1)
                return '#';
            return ch;
        }
    };

    注意:最开始我用 int arr[258] = {-1};来初始化数组值-1 。 这样是不行的  。这种方式只能初始化为0

    解释:代码中的arr数组装的是出现一次的字符的下标,当给定字符串很长时,则遍历256个字符即可。

  • 相关阅读:
    表单文件上传
    页面布局
    HDU 2089 不要62
    洛谷 P1776 宝物筛选(多重背包)
    HDU 5569 matrix
    洛谷 P1244 青蛙过河
    洛谷 P2362 围栏木桩
    洛谷 P2719 搞笑世界杯
    洛谷 P1877 [HAOI2012]音量调节
    洛谷 P1569 [USACO11FEB]属牛的抗议Generic Cow Prote…
  • 原文地址:https://www.cnblogs.com/Lune-Qiu/p/9263781.html
Copyright © 2020-2023  润新知