题目描述:

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

分析:

字符只能一个一个从字符流中读出来,因此要定义一个容器来保存字符以及其在字符流中的位置。

  为尽可能搞笑解决问题,要在O(1)时间内往数据容器中插入字符,及其对应的位置,因此这个数据容器可以用哈希表来实现,以字符的ASCII码作为哈希表的键值key,字符对应的位置作为哈希表的值value。

  开始时,哈希表的值都初始化为-1,当读取到某个字符时,将位置存入value中,如果之前读取过该字符(即value>=0),将value赋值为-2,代表重复出现过。最后对哈希表遍历,在value>=0的键值对中找到最小的value,该value即为第一个只出现一次的字符,ASCII码为key的字符即为所求字符。

示例代码:

public class zifuliu_first_once {private static int[] occurence;private static int index = 0;private static void init_flag_arr() {occurence = new int[256];for (int i = 0; i < 256; i++) {occurence[i] = -1;}}private static void insert(char ch) {if (occurence[(int)ch] == -1) {occurence[(int)ch] = index;} else if (occurence[(int)ch] >= 0) {occurence[(int)ch] = -2;}index++;}private static char get_first_appear_once_char() {int min_index = Integer.MAX_VALUE;char ret = '*';for (int i = 0; i < 256; i++) {if (occurence[i] >= 0 && occurence[i] < min_index) {min_index = occurence[i];ret = (char) i;}}return ret;}public static void main(String[] args) {init_flag_arr();insert('g');insert('o');System.out.println(get_first_appear_once_char());insert('o');insert('g');insert('l');insert('e');System.out.println(get_first_appear_once_char());}
}

欢迎关注,一起学习

找第一个只出现一次的字符_剑指offer 字符流中第一个只出现一次的字符相关推荐

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

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

  2. 剑指offer:数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 解题思路 用容器存次数. class Solution { public:void FindNu ...

  3. 剑指offer面试题[35]-第一个只出现一次的字符

    题目描述 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置. 分析:        这个题目最直观的思路是:从头开始扫描这个字符串 ...

  4. 剑指Offer - 面试题50. 第一个只出现一次的字符(unordered_map)

    1. 题目 在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. 示例: s = "abaccdeff" 返回 "b"s = "&q ...

  5. 剑指offer面试题50. 第一个只出现一次的字符(哈希表)

    题目描述 在字符串 s 中找出第一个只出现一次的字符.如果没有,返回一个单空格. s 只包含小写字母. 思路 详见链接 代码 class Solution:def firstUniqueChar(se ...

  6. 《剑指offer》-数组中只出现一次的数字

    /* 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.思路: 如果是只有一个数字出现一次,那么所有数字做异或就得到结果: 现在有两个数字x,y分别出现一次, ...

  7. 《剑指offer》数组中只出现一次的数字

    题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 解析:直接用set集合去重,每个集合的元素都去原数组array里找,出现一次就保存下 //num1, ...

  8. 在数组中查找指定元素_剑指 offer 第一题: 二维数组中的查找

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  9. 《剑指offer》--- 数组中只出现一次的数字

    本文算法使用python3实现 1. 问题   一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.   时间限制:1s:空间限制:32768K 2 思路描述 ...

最新文章

  1. 用宏定义写出swap(x,y)
  2. ASP.NET MVC的路由
  3. 利用自己构建的网络进行鼾声识别
  4. android 多级分组,android 二级菜单(类似QQ分组)
  5. 威漫哨兵机器人_曾经秒杀X战警的哨兵机器人,在漫威漫画原著里更让人头疼!...
  6. 数仓1.4 |业务数仓搭建| 拉链表| Presto
  7. 基于MQTT的python聊天室
  8. 最新RiPro6.3.8 wordpress主题最新版完整修复去后门和加密文件
  9. vsftp配置虚拟账户
  10. 关于 Swift Package Manager 的一些经验分享
  11. 尚硅谷-Dubbo篇
  12. 软件原型设计(软件Axure_RP)
  13. powerquery分组_Power Query系列 - 排序Ranking
  14. AtCoder Beginner Contest 242 C~E 题解
  15. Android studio案例Android商城
  16. 如何把PDF文档转换成TXT格式文件
  17. switch...case
  18. UDP GSO原理及应用
  19. 音频提升音质解决方案之我找的过程
  20. 小狼毫 Rime 输入方案 设置

热门文章

  1. 判断jQuery选择器结果为空 - CSDN博客
  2. magent + memcached部署过程
  3. JavaScript跳转到页面某个锚点#
  4. OpenCV图像或视频显示在VC对话框中的方法
  5. 合成艺术字二 :使用的透明类以及所用的颜色选择器JS(完整事列源码)
  6. 小凡做蛋糕(Python)
  7. 《动手学深度学习 PyTorch版》学习笔记(一):数据操作
  8. 图计算-Pregel-Hama
  9. select2实现全选
  10. java构造器_Java类加载的过程