news 2026/7/1 5:42:27

思路及解答有序哈希表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
思路及解答有序哈希表

以直接使用哈希的数据结构来存取我们的字符,对与重复的字符可以对值进行统计或者标记都行。这里要用LinkedHashMap,因为题目要求到了要出现的第一个不重复的字符,所以如果不使用有序map的话,那么我们就不能保证取到的是第一个不重复的字符。

java

public class Solution { //Insert one char from stringstream //因为后面要遍历保证有序,所以这里使用LinkedHashMap Map<Character,Integer> map = new LinkedHashMap<>(); public void Insert(char ch){ if(map.containsKey(ch)){ map.put(ch,-1); }else{ map.put(ch,1); } } //return the first appearence once char in current stringstream public char FirstAppearingOnce(){ for(Character i : map.keySet()){ if(map.get(i) == 1){ return i; } } return '#'; } }
  • 时间复杂度:插入O(1),查询最坏O(n)
  • 空间复杂度:O(n)

队列+计数数组(最优)

结合了队列的先进先出特性和数组的快速访问能力,能够高效解决动态字符流中的首个不重复字符查找问题

java

public class Solution { private int[] count = new int[128]; // ASCII字符计数数组 private Queue<Character> queue = new LinkedList<>(); // 维护候选字符顺序 // 插入字符到流中 public void Insert(char ch) { count[ch]++; // 字符出现次数加1 queue.add(ch); // 字符加入队列 // 清理队列头部已重复的字符 while (!queue.isEmpty() && count[queue.peek()] > 1) { queue.poll(); } } // 返回当前第一个不重复字符 public char FirstAppearingOnce() { return queue.isEmpty() ? '#' : queue.peek(); } }
  • 时间复杂度:每个字符的插入操作是均摊O(1),查询操作是严格的O(1)
  • 空间复杂度:O(1)(固定大小的数组和队列)

双数组记录

通过记录字符首次出现的位置和状态,在查询时进行全局扫描

java

public class Solution { private int[] position = new int[128]; // 记录字符位置或状态 private int index = 1; // 当前字符位置索引 public Solution() { // 初始化,-1表示未出现过 for (int i = 0; i < 128; i++) { position[i] = -1; } } public void Insert(char ch) { if (position[ch] == -1) { // 第一次出现,记录位置 position[ch] = index; } else if (position[ch] > 0) { // 重复出现,标记为-2 position[ch] = -2; } index++; } public char FirstAppearingOnce() { int minIndex = Integer.MAX_VALUE; char result = '#'; // 扫描找到最小正整数值对应的字符 for (int i = 0; i < 128; i++) { if (position[i] > 0 && position[i] < minIndex) { minIndex = position[i]; result = (char) i; } } return result; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 5:40:09

2026年文字变清晰工具实测:3款热门工具体验分享

图片变清晰大家应该都不陌生了&#xff0c;不过文字变清晰其实也是一个很常见的需求。像模糊截图、扫描文件、聊天记录或者一些压缩过的图片&#xff0c;经常会出现文字看不清的情况。 这次我体验了3款比较热门的文字变清晰工具&#xff0c;看看它们的实际效果到底怎么样。 一…

作者头像 李华
网站建设 2026/7/1 5:36:25

如何用G-Helper实现华硕笔记本的精准性能控制与优化

如何用G-Helper实现华硕笔记本的精准性能控制与优化 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertbook, ROG…

作者头像 李华
网站建设 2026/7/1 5:34:52

APK Installer深度解析:如何在Windows上优雅管理Android应用

APK Installer深度解析&#xff1a;如何在Windows上优雅管理Android应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer APK Installer是一款专为Windows平台设计的And…

作者头像 李华
网站建设 2026/7/1 5:34:07

【信息科学与工程学】计算机科学与自动化——第二百五十五篇 并行计算与计算机网络02

聚焦并行计算与计算机网络的深度融合,涵盖网络感知调度、梯度压缩、硬件卸载、新型网络架构、网络与计算协同优化等前沿方向。 编号 类型 领域 子领域 问题 详细的数学分析 参数列表 & 数值范围/边界/常量 关联知识 296 算法设计 并行计算与网络 网络感知调度 …

作者头像 李华
网站建设 2026/7/1 5:33:28

2026年重庆刑事案件代理专业度数据调研:本地律师排行榜揭秘

开头&#xff1a;行业痛点/趋势引入在刑事法律领域&#xff0c;2026年以来&#xff0c;一线刑事办案、当事人委托以及行业执业都面临着诸多痛点。从当事人角度来看&#xff0c;选律师难、怕被骗的问题依旧突出&#xff0c;分不清真律师、销售还是“黑律所”&#xff0c;网上宣传…

作者头像 李华