剑指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;
			}
		}
	}
}
相关推荐
华仔啊1 分钟前
乐观锁、悲观锁和分布式锁,你用对了吗?
java·分布式
自由的疯2 分钟前
Java下载图片并导出压缩包
java·后端·trae
Leiwenti14 分钟前
MySQL高阶篇-数据库优化
数据结构·数据库·mysql
言兴15 分钟前
前端工程化演进之路 —— 从 Webpack 到 Vite 的架构革命
前端·javascript·面试
tanxiaomi22 分钟前
Spring面试宝典:Spring IOC的执行流程解析
java·spring·面试
南篱24 分钟前
JavaScript 异步之巅:深入理解 ES6 Promise
javascript·面试
已读不回14326 分钟前
设计模式-工厂模式
前端·算法·代码规范
CoovallyAIHub38 分钟前
YOLOv8-SMOT:基于切片辅助训练与自适应运动关联的无人机视角小目标实时追踪框架
深度学习·算法·计算机视觉
NightDW38 分钟前
连续周更任务模块的设计与实现
java·后端·mysql
华仔啊40 分钟前
什么情况下用线程池,怎么用?看完就会
java·后端