zoukankan      html  css  js  c++  java
  • 剑指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 };
  • 相关阅读:
    HTML
    Java 1.8 新特性
    Java 反射
    子网与超网
    Java 网络编程
    Java 单例模式、枚举
    Java 线程生命周期、线程池
    Java 多线程
    Java Properties、流对象关闭格式
    基础练习 十六进制转八进制
  • 原文地址:https://www.cnblogs.com/zzw1024/p/11701124.html
Copyright © 2011-2022 走看看