博客
关于我
剑指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.js的express框架用法(一)
    查看>>
    Node.js的交互式解释器(REPL)
    查看>>
    Node.js的循环与异步问题
    查看>>
    Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
    查看>>
    nodejs + socket.io 同时使用http 和 https
    查看>>
    NodeJS @kubernetes/client-node连接到kubernetes集群的方法
    查看>>
    NodeJS API简介
    查看>>
    nodejs Error: request entity too large解决方案
    查看>>
    Nodejs express 获取url参数,post参数的三种方式
    查看>>
    nodejs http小爬虫
    查看>>
    nodejs libararies
    查看>>
    vue3+element-plus 项目中 el-switch 刷新后自动触发change?坑就藏在这里!
    查看>>
    nodejs npm常用命令
    查看>>
    nodejs npm常用命令
    查看>>
    Nodejs process.nextTick() 使用详解
    查看>>
    NodeJS yarn 或 npm如何切换淘宝或国外镜像源
    查看>>
    nodejs 中间件理解
    查看>>
    nodejs 创建HTTP服务器详解
    查看>>
    nodejs 发起 GET 请求示例和 POST 请求示例
    查看>>
    NodeJS 导入导出模块的方法( 代码演示 )
    查看>>