• 剑指offer——53字符流中第一个只出现一次的字符


    题目描述

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

    输出描述:

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

    题解:
      使用哈希表记录每个字母出现的次数,当选中的字母为重复时,就像后寻找未重复的字母
     1 class Solution
     2 {
     3 public:
     4     //Insert one char from stringstream
     5     void Insert(char ch)
     6     {
     7         str += ch;
     8         word[ch]++;
     9         if (res == '#' && word[ch] == 1)//新的字母
    10             res = ch;
    11         if (word[res] > 1)//重复了
    12         {
    13             res = '#';
    14             for (int i = index; i < str.length(); ++i)//先后寻找未重复的字母
    15             {
    16                 if (word[str[i]] == 1)
    17                 {
    18                     res = str[i];
    19                     index = i;
    20                     break;
    21                 }
    22             }
    23         }
    24     }
    25     //return the first appearence once char in current stringstream
    26     char FirstAppearingOnce()
    27     {
    28         return res;
    29     }
    30 private:
    31     string str = "";
    32     int word[256] = { 0 };
    33     int index = 0;
    34     char res = '#';
    35 };
  • 相关阅读:
    [NOI Online 2021 提高组] 愤怒的小 N
    CF1474F 1 2 3 4 ...
    CF1466H Finding satisfactory solutions
    CF1336F Journey
    [PKUSC2021]代金券
    如何科学地设计对拍随机种子
    CF1168E Xor Permutations
    「JOISC 2019 Day2」两种运输
    springboot json参数
    springboot整合webserver应用
  • 原文地址:https://www.cnblogs.com/zzw1024/p/11701124.html
Copyright © 2020-2023  润新知