news 2026/1/16 6:30:09

【快速刷题模板】-2分钟秒杀字符统计-只出现一次的字符串

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【快速刷题模板】-2分钟秒杀字符统计-只出现一次的字符串

字符串-只出现一次的字符串

默写代码:

publicclassSolution{/** * @param str: str: the given string * @return: char: the first unique character in a given string */publiccharfirstUniqChar(Stringstr){// Write your code hereMap<Character,Integer>map=newHashMap<>();// 0if(str==null||str.length()==0)returnstr.charAt(0);// countfor(Characterc:str.toCharArray()){map.put(c,map.getOrDefault(c,0)+1);}for(inti=0;i<str.length();i++){charc=str.charAt(i);if(map.get(c)==1){returnc;}}returnstr.charAt(0);}}

为什么 Map<Character, Integer> map = new HashMap<>();用包装类

因为Java 泛型只支持引用类型,不支持基本类型。这是 Java 语言设计的硬性规定,与集合框架的实现机制直接相关。


核心原因:

  1. 泛型擦除机制
    Java 泛型是编译期语法糖,运行时会擦除类型信息变为Objectchar/int是基本类型,不属于Object子类,无法参与擦除转换。Character/Integer作为包装类,继承自Object,完全符合要求。

  2. 集合存储的是对象引用
    HashMap内部实现依赖Node<K,V>节点存储键值对,其字段类型是KV,只能是引用类型。基本类型没有引用概念。


编码便利性:自动装箱/拆箱

虽然必须用包装类,但 Java 5+ 的自动装箱机制让你几乎无感:

map.put('a',1);// 'a' 自动装箱为 Character,1 自动装箱为 Integercharc=map.keySet().iterator().next();// 自动拆箱intcount=map.get('a');// 自动拆箱

⚠️ 你代码的致命 Bug

if(str==null||str.length()==0)returnstr.charAt(0);// 空串时 charAt(0) 会抛异常!

应改为:

if(str==null||str.length()==0)return' ';// 或抛异常

效率优化:数组秒杀

这道题最优解是数组计数(ASCII 范围),比 HashMap 快 3-5 倍:

publiccharfirstUniqChar(Stringstr){if(str==null||str.length()==0)return' ';int[]count=newint[256];// ASCII 范围for(charc:str.toCharArray())count[c]++;for(charc:str.toCharArray())if(count[c]==1)returnc;return' ';}

记住:唯手熟尔,模板刻在骨子里才能秒。

2.// ASCII 范围为什么是256呢?

因为 8位二进制最多能表示256个不同数值(2^8 = 256),范围是0 ~ 255


详细解释:

  1. 标准 ASCII 码
    只定义了128个字符(0-127),包括字母、数字、控制符等。

  2. 扩展 ASCII 码
    早期系统为了容纳更多符号,把范围扩展到256(0-255),涵盖了拉丁字母、制表符等。

  3. 编程惯例
    在面试算法题中,题目默认字符串由可见字符组成,其 ASCII 值都在256范围内。用new int[256]100%覆盖所有可能性,且内存占用极小(仅 1KB)。

  4. Java char 类型
    Java 的char虽然是 16 位(Unicode),但本题涉及的字符都在 ASCII 子集内,所以用 256 的数组完全够用。


记住这个模板:

int[]cnt=newint[256];// 字符计数器标配

这是刷题肌肉记忆的一部分,唯手熟尔,直接刻进脑子里。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/7 19:46:25

毕业论文救星:8款免费AI工具一键生成初稿,AIGC率低至5%!

一、终极清单&#xff1a;8款免费AI论文工具核心对比&#xff08;2024年实测&#xff09; 如果你正在被毕业论文的选题、初稿、降重、图表等问题折磨&#xff0c;这张权威实测对比表能帮你10分钟锁定最佳工具。我们从「生成效率、AIGC风险、功能覆盖、学术适配性」4个核心维度…

作者头像 李华
网站建设 2026/1/12 13:38:05

目前免费的ai编辑器或者vscode适用的免费的ai插件有哪些

目前有不少免费且好用的AI插件可以增强你的VSCode编程体验。你可以根据自己的核心需求&#xff0c;参考下表进行快速选择&#xff1a;插件/工具名称形式主要特点免费策略/限制CodeiumVSCode插件支持70种语言&#xff0c;补全和生成代码速度快&#xff0c;个人用户完全免费且无次…

作者头像 李华
网站建设 2026/1/15 18:41:44

光伏逆变器“AI谐波抑制”:攻克并网难关,THD低至0.7%的电能质量革命

在全球能源转型加速推进的背景下&#xff0c;分布式光伏装机容量持续攀升&#xff0c;但光伏逆变器的电力电子非线性特性&#xff0c;导致大量谐波注入电网&#xff0c;成为制约并网效率的核心瓶颈。传统谐波抑制方案难以应对光照波动、多机并联带来的动态谐波变化&#xff0c;…

作者头像 李华
网站建设 2026/1/15 0:30:30

基于小波变换算法的光纤故障诊断研究开题报告

太原学院2025届毕业论文&#xff08;设计&#xff09;开题报告系名&#xff1a;智能与信息工程 专业&#xff1a;智能科学与技术 班级&#xff1a;智能2102学 号4202150202224姓 名论文&#xff08;设计&#xff09;题目基于小波变换算法的光纤故障诊断研…

作者头像 李华
网站建设 2026/1/15 20:02:18

苹果有没有可能,自行设计相机CMOS底片?

据说苹果要使用三星底片&#xff0c;显然是为了降本。于是我就想&#xff0c;有没有可能&#xff0c;苹果将来会自行设计底片&#xff1f;然后委托别人生产&#xff1f;

作者头像 李华
网站建设 2026/1/16 5:49:58

学长亲荐8个AI论文软件,助你轻松搞定本科生毕业论文!

学长亲荐8个AI论文软件&#xff0c;助你轻松搞定本科生毕业论文&#xff01; 论文写作的“救星”来了&#xff0c;AI 工具如何帮你轻松应对 对于大多数本科生来说&#xff0c;撰写毕业论文是一项既复杂又耗时的任务。从选题、查资料、列大纲到撰写初稿、反复修改&#xff0c;每…

作者头像 李华