剑指offer:第一个只出现一次的字符

本文探讨了在长字符串中查找第一个仅出现一次的字符及其位置的两种算法思路。第一种是时间复杂度为O(n^2)的逐个字符比较方法;第二种是时间复杂度为O(n)的哈希表存储字符频率方法,通过两次遍历实现快速查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).

 

思路1:时间复杂度o(n的平方)

逐个遍历字符串中的每一个字符,每遍历一个字符,都将它和它后面的字符进行比较,如果没有重复的,则说明该字符只出现一次。这种方法的时间负责度为o(n的平方)。

思路2:时间复杂度o(n)

通过对字符串的一次遍历,将字符串中出现的所有的字符和对应的次数保存起来,放到一个容器里。再次遍历,通过查字典的方式直接得到第一个只出现一次的字符对应的idx。

实现1:

java util包中的哈希表就可以存储key-value形式的数据,通过遍历,将字符及其出现的次数存储在哈希表中,然后直接查表获得第一次出现1次的字符。

 

实现2:

不使用java的工具包,自己创建映射关系

注意:字符char的范围是-128到127,不仅仅是a-z

代码中的hash函数是为了将-128-127的char字符映射到arr的0-255个下标下。

 

 

参考博客:

https://www.jianshu.com/p/be20ae23e5fb

https://blog.youkuaiyun.com/zjkC050818/article/details/71453529

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值