博客
关于我
剑指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存储IP地址的数据类型
    查看>>
    mysql存储中文 但是读取乱码_mysql存储中文乱码
    查看>>
    MySQL存储引擎
    查看>>
    MySQL存储引擎--MYSIAM和INNODB引擎区别
    查看>>
    Mysql存储引擎(2):存储引擎特点
    查看>>
    MySQL存储引擎--MyISAM与InnoDB区别
    查看>>
    mysql存储总结
    查看>>
    mysql存储登录_php调用mysql存储过程会员登录验证实例分析
    查看>>
    MySql存储过程中limit传参
    查看>>
    MySQL存储过程入门
    查看>>
    mysql存储过程批量建表
    查看>>
    MySQL存储过程的使用实现数据快速插入
    查看>>
    mysql存储过程详解
    查看>>
    Mysql存表情符号发生错误
    查看>>
    MySQL学习-group by和having
    查看>>
    MySQL学习-MySQL数据库事务
    查看>>
    MySQL学习-MySQL条件查询
    查看>>
    MySQL学习-SQL语句的分类与MySQL简单查询
    查看>>