哈希算法题目:字符串中的第一个唯一字符
字数 713 2025-10-25 18:57:06
哈希算法题目:字符串中的第一个唯一字符
题目描述:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回-1。例如,输入字符串"leetcode",返回0,因为'l'是第一个不重复的字符;输入字符串"loveleetcode",返回2,因为'v'是第一个不重复的字符。
解题过程:
-
问题分析:我们需要找到字符串中第一个出现且仅出现一次的字符。关键在于如何记录每个字符的出现次数,并按照原字符串的顺序找到第一个满足条件的字符。
-
核心思路:使用哈希表(字典)来统计每个字符出现的频率。然后再次遍历字符串,检查每个字符在哈希表中的频率,第一个频率为1的字符就是我们要找的。
-
具体步骤:
- 第一步:创建频率统计哈希表。遍历字符串,对于每个字符,在哈希表中记录其出现的次数。如果字符不在哈希表中,则添加并设置计数为1;如果已存在,则计数加1。
- 第二步:按顺序查找第一个唯一字符。再次从头遍历字符串,对于每个字符,查询哈希表获取其出现频率。当遇到第一个频率为1的字符时,立即返回其索引。
- 第三步:处理无解情况。如果遍历完整个字符串都没有找到频率为1的字符,则返回-1。
-
举例说明(以"loveleetcode"为例):
- 频率统计:遍历字符串,得到哈希表:{'l':2, 'o':2, 'v':1, 'e':4, 't':1, 'c':1, 'd':1}
- 顺序检查:遍历字符串:
- 索引0字符'l'频率为2,跳过
- 索引1字符'o'频率为2,跳过
- 索引2字符'v'频率为1,符合条件,返回索引2
-
算法特点:这种方法通过两次遍历解决问题,时间复杂度为O(n),空间复杂度为O(k)(k为字符集大小),是一种高效的解决方案。