剑指offer面试题35 第一个只出现一次的字符

考察点

知识点

题目

分析

这道题目求字符串中第一个只出现一次的字符,如果我们循环遍历字符串,依次和其余字符比较,这样的时间复杂度非常长。类似这种题目思维一定要想着如何能够拿空间换时间。如果我们能有一个哈希表,key对应字符串中每个字符信息,value对应它出现的次数,那么当统计出每个字符的次数以后,再遍历一遍就能拿到第一个只出现一次的字符了,俩次O(n)遍历就可以搞定。java字符用的是Unicode编码,每个字符占用2个字节,要想覆盖到全部字符,需要一个长度为65536的int类型的数组,就可以充当这个哈希表的角色

java 复制代码
public class ThirtyFive {
	public static void main(String[] args) {
		String str = "abaccdeff";
		getOne(str);
	}
	public static void getOne(String str) {
		int[] count = new int[65535];
		for (int i = 0;i<str.length();i++) {
			count[str.charAt(i)]++;
		}
		for (int i = 0;i<str.length();i++) {
			if(count[str.charAt(i)] == 1) {
				System.out.println(str.charAt(i));
				break;
			}
		}
	}
}
相关推荐
写后端的胖头鱼19 小时前
一文详解B+树原理(附场景+示例)
数据结构·b树
怕浪猫21 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
无线通信科研笔记21 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
daidaidaiyu21 小时前
ThingsBoard 集群的核心逻辑源码分析
java
mmmmath_31 天前
二叉树の递归遍历
算法
All for pursuit.1 天前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
我可能是个假开发1 天前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
caoerzhong1 天前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
小师兄吃牛肉1 天前
C语言中的nullptr有必要吗
c语言·c++·算法
【JAVA】玩家1 天前
Spring核心原理全解析:从零到生产实战
java·后端·spring