剑指Offer-56-字符流中第一个不重复的字符

这篇博客介绍了如何在字符流中找出第一个只出现一次的字符。通过利用哈希表的原理,可以使用数组作为统计容器,记录字符出现次数。有两种思路:一是结合StringBuilder记录字符,二是仅用map数组,通过全局顺序索引优化查找过程。在遍历过程中,找到value表示次序且次序最小的字符即为答案。
摘要由CSDN通过智能技术生成

项目地址:https://github.com/SpecialYy/Sword-Means-Offer

题目

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

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

解析

预备知识

看到统计字符相关的题目,可以首选哈希表的思想,也就是说字符作为key,出现次数作为value,这样我们就可以牺牲空间换来O(1)的访问。一般适用于键值较少的情况,否则可能会超出内存限制。
因为哈希表的底层结构其实就是数组,键值对的key通过hash函数计算的结果在数组索引范围内进行寻址,也就是说通过哈希函数可以把key转化为数字,且数字范围为数组的大小。
又因为字符的ascii码就是整型数字且唯一表示字符,因此我们可以直接把字符直接作为数组索引,那么出现的次数就是数组中元素值。

思路一

有了预备知识对哈希表原理的解释,我们可以利用字符的特性,使用数组作为我们简单map容器。
我们申请一个2的15次方大的数组(因为Java中char用2个字节实现,其他语言的话可以自行选择)来作为map对字符的出现次数进行统计,然后申请一个字符串缓冲器StringBuilder来记录插入的字符,为了防止缓冲器容量爆炸,我们在

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值