题目描述

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

解题思路

利用下标进行映射即可。

AC代码

class Solution
{public://Insert one char from stringstreamvoid Insert(char ch){str += ch;count[static_cast<int>(ch)]++;}//return the first appearence once char in current stringstreamchar FirstAppearingOnce(){for (const auto& ch: str) {if (count[static_cast<int>(ch)] == 1) {return static_cast<int>(ch);}}return '#';}std::string str;int count[257] = { 0 };
};

下面这个代码理论上也是对的,而且时空复杂度在常数级别上来说一般更小,但是无法通过,原因不详。。

class Solution
{public://Insert one char from stringstreamvoid Insert(char ch){int n = static_cast<int>(ch);++counts[n];if (counts[n] == 1) {first[n] = MAX;++MAX;}}//return the first appearence once char in current stringstreamchar FirstAppearingOnce(){int best = -1;int m = 100000000;for (int i = 0; i < 257; ++i) {if (counts[i] == 1 && m > first[i]) {best = i;m = first[i];}}if (best > 0) {return static_cast<char>(best);}else {return '#';}}int counts[257] = { 0 };  // 每个字符出现的次数int first[257] = { 0 };   // 第一次出现时的计数int MAX{ 0 };
};

剑指offer之字符流中第一个不重复的字符相关推荐

  1. 剑指offer——面试题55:字符流中第一个不重复的字符

    剑指offer--面试题55:字符流中第一个不重复的字符 Solution1: 当年第一次做这个题的做法 对此题最大的感想是: 1)区分deque(双端队列)和queue(队列): 2)要熟悉queu ...

  2. 《剑指offer》-- 第一个只出现一次的字符、数组中只出现一次的数字、字符流中第一个不重复的字符、数组中重复的数字

    一.第一个只出现一次的字符: 1.题目: 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写 ...

  3. 【剑指offer-54】20190907/03 字符流中第一个不重复的字符

    [剑指offer-54]字符流中第一个不重复的字符 考点:字符串 时间限制:1秒 空间限制:32768K 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符&qu ...

  4. java统计一个字符串中每个字符出现的次数_剑指offer算法题054:字符流中第一个不重复的字符...

    推荐阅读:宇宙条的工作总结:一年前还在面试找工作,一年后在面试找工作的学弟学妹们:第一次当面试官的经历分享小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合 ...

  5. 剑指offer——python【第54题】字符流中第一个不重复的字符

    题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

  6. 剑指offer:字符流中第一个不重复的字符

    题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出 ...

  7. [剑指offer] 字符流中第一个不重复的字符

    本文首发于我的个人博客:尾尾部落 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是" ...

  8. 《剑指offer》字符流中第一个不重复的字符

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

  9. (剑指Offer)面试题55:字符流中第一个不重复的字符

    题目: 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出前 ...

最新文章

  1. DSML:深度子空间相互学习模型(用于癌症亚型预测)
  2. Webpack4 高手之路 第一天
  3. 9.mybatis动态SQL标签的用法
  4. 新版本Chrome同源策略、跨域问题处理No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.
  5. 用_beginthreadex不用 CreateThread
  6. LeetCode算法入门- Longest Common Prefix -day13
  7. 下载安装vs2019详细版
  8. 牛客网——F求最大值
  9. win10配置内外网同时使用
  10. 学习笔记(二)之字符常量和字符串常量
  11. Windows 软件管理
  12. C64x+ 与 C64x Cache 区别
  13. sitemix mysql_用Sitemix免费空间搭建高速日本无限流量GAE流行应用_免费PHP空间 | 微站中国|MicroHost...
  14. GitHub 上最适合初学者的开源项目——Python 篇
  15. 数据推荐 | 自然对话语音数据集
  16. 字符编码、QString编码、Qt界面乱码问题总结
  17. ISO 26262中的ASIL等级确定与分解
  18. hibernate的HQL查询语句
  19. 将数组中的零元素移动到最后(三种解法)(C)
  20. tigase-7.1.3集群搭建

热门文章

  1. A - Cube Stacking(带权并查集)
  2. Puzzle——模拟
  3. 洛谷 P1036 [NOIP2002 普及组] 选数(DFS)
  4. 实验4.2 实现客户机(CLIENT)类
  5. 【Qt教程】3.5 - Qt5 QPainter绘图抗锯齿、相对坐标/平移坐标系、QPainter画图片、手动调用QPainter绘图事件
  6. c/c++教程 - 2.4.4 友元friend用法
  7. 以一个通俗易懂的方式解释一下写程序为什么要声明接口和类,面向对象的编程思想,字数不多,主要通过代码理解
  8. Java发送Http请求,解析html返回
  9. 敏捷开发一千零一问系列之五:怎样让队员主动要活?
  10. (IStool)判断系统位数并打包不同的文件