博客
关于我
剑指Offer打卡day 41—— Acwing 64. 字符流中第一个只出现一次的字符
阅读量:803 次
发布时间:2019-03-26

本文共 1149 字,大约阅读时间需要 3 分钟。

【题目描述】

以下代码实现了一个用于处理字符串流并跟踪字符出现次数的解决方案。该方案包含两个主要功能:插入字符到队列中以及返回队列中第一个只出现一次的字符。

【思路】

该解决方案使用了队列和哈希集合的组合来实现效率高的字符处理。具体来说,它通过以下方式实现:

  • 将字符插入队列中,并更新字符出现次数。
  • 当需要返回第一个只出现一次的字符时,队列前端的字符会被检查。如果对应的字符在队列中只出现了一次,则直接返回该字符。否则,队列会继续向前移动,直到找到满足条件的字符。
  • 如果队列中没有找到满足条件的字符,则返回特定占位符字符。
  • 【代码解析】

    import java.util.*;  public class Solution {      Map
    count = new HashMap<>(); Queue
    q = new LinkedList<>(); public void insert(char ch) { q.offer(ch); if (!count.containsKey(ch)) { count.put(ch, 1); } else { count.put(ch, count.get(ch) + 1); } } public char firstAppearingOnce() { if (!q.isEmpty() && count.get(q.peek()) == 1) { return q.peek(); } while (!q.isEmpty() && count.get(q.peek()) > 1) { q.poll(); } return q.isEmpty() ? '#' : q.peek(); } }

    该代码通过队列来维护字符流,并通过哈希集合来记录每个字符的出现次数。这样,当处理字符串流时,可以在常数时间内获取第一个只出现一次的字符,这大大提高了效率。

    【技术细节】

  • 使用队列来维护字符流,确保先进先出的顺序。
  • 哈希集合用于记录字符出现次数,时间复杂度为O(1),适用于频繁查找的场景。
  • firstAppearingOnce 方法通过前置检查和循环清除重复字符,保证返回的字符是当前队列中第一个唯一出现的字符。
  • 回退字符’#’用于表示没有找到符合条件的字符,这可以根据具体需求进行修改。
  • 转载地址:http://gbqyk.baihongyu.com/

    你可能感兴趣的文章
    Node第一天
    查看>>
    node编译程序内存溢出
    查看>>
    Node读取并输出txt文件内容
    查看>>
    node防xss攻击插件
    查看>>
    noi 1996 登山
    查看>>
    noi 7827 质数的和与积
    查看>>
    NOI-1.3-11-计算浮点数相除的余数
    查看>>
    NOI2010 海拔(平面图最大流)
    查看>>
    NOIp2005 过河
    查看>>
    NOIP2011T1 数字反转
    查看>>
    NOIP2014 提高组 Day2——寻找道路
    查看>>
    noip借教室 题解
    查看>>
    NOIP模拟测试19
    查看>>
    NOIp模拟赛二十九
    查看>>
    Nokia5233手机和我装的几个symbian V5手机软件
    查看>>
    Non-final field ‘code‘ in enum StateEnum‘
    查看>>
    none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
    查看>>
    None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
    查看>>
    NOPI读取Excel
    查看>>
    NoSQL&MongoDB
    查看>>