博客
关于我
剑指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/

    你可能感兴趣的文章
    mysql复杂查询,优质题目
    查看>>
    MySQL外键约束
    查看>>
    MySQL多表关联on和where速度对比实测谁更快
    查看>>
    MySQL多表左右连接查询
    查看>>
    mysql大批量删除(修改)The total number of locks exceeds the lock table size 错误的解决办法
    查看>>
    mysql如何做到存在就更新不存就插入_MySQL 索引及优化实战(二)
    查看>>
    mysql如何删除数据表,被关联的数据表如何删除呢
    查看>>
    MySQL如何实现ACID ?
    查看>>
    mysql如何记录数据库响应时间
    查看>>
    MySQL子查询
    查看>>
    Mysql字段、索引操作
    查看>>
    mysql字段的细节(查询自定义的字段[意义-行列转置];UNION ALL;case-when)
    查看>>
    mysql字段类型不一致导致的索引失效
    查看>>
    mysql字段类型介绍
    查看>>
    mysql字段解析逗号分割_MySQL逗号分割字段的行列转换技巧
    查看>>
    MySQL字符集与排序规则
    查看>>
    MySQL字符集乱码
    查看>>
    mysql字符集设置
    查看>>
    mysql存储IP地址的数据类型
    查看>>
    mysql存储中文 但是读取乱码_mysql存储中文乱码
    查看>>