剑指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;
			}
		}
	}
}
相关推荐
数智启示录7 小时前
实时数据湖 Flink CDC + Kafka +Doris 【企业级实战】之Kafka 事件缓冲层 【附核心源码】 04
java·大数据·flink·kafka·数据库开发
AI人工智能+电脑小能手7 小时前
大白话说Java设计模式-41-备忘录模式(源码剖析篇)
java·设计模式·备忘录模式·源码分析·serializable·undo log·spring statemachine
lv__pf7 小时前
Sentinel【TL微服务10、11】
java·微服务·sentinel
charlie1145141917 小时前
deque、list 与 forward_list:vector 之外的三个选择
开发语言·数据结构·c++·list·开源项目
动词ing7 小时前
【学习笔记】数据结构(数组滑动窗口+无重复字符的最长字串题目)
数据结构·笔记·学习
Escalating_xu7 小时前
【C++ string 上篇】从字符串基础到容量管理、迭代器与经典算法题
java·c++·算法
拓人间精准客8 小时前
ToB 销售获客避坑指南:如何用全维度大数据实现降本增效
大数据·数据结构·单例模式
曹牧8 小时前
Java:Java 数组转 List
java·开发语言·windows
Keven_118 小时前
算法札记:ACM中将高精度算法融于题目的模板
算法·acm·精度
小七在进步8 小时前
数据结构:快速排序
数据结构·算法·排序算法