Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:
输入: s = "leetcode"
输出: 0
示例 2:
输入: s = "loveleetcode"
输出: 2
示例 3:
输入: s = "aabb"
输出: -1
提示:
- 1 <= s.length <= 10^5
- s 只包含小写字母
二、思路分析:
因为字符串只包含小写字母,所以所有的字符总共有a~z这26个类型。可以先统计每个字符各有多少个。最后再遍历字符串,看哪个字符串统计后的总数为1.(可能有不止一个,返回第一个被找到的字符即可。)可以利用字典的特性,以26个字母为键,出现的次数为值。 统计所有字符的个数后,再次遍历字符串,看看哪个的键值为1.
三、AC 代码:
class Solution:
def firstUniqChar(self, s: str) -> int:
words = [chr(i) for i in range(97,123)]
values = [0] * 26
wordsDict = dict(zip(words,values))
for word in s:
wordsDict[word]+=1
for i in range(len(s)):
if wordsDict[s[i]] == 1:
return i
return -1
四、总结:
统计类大多数可以使用哈希法。
范文参考:
387. 字符串中的第一个唯一字符 - 字符串中的第一个唯一字符 - 力扣(LeetCode) (leetcode-cn.com)
两种哈希的解题思路:注释详细,思路简单 - 字符串中的第一个唯一字符 - 力扣(LeetCode) (leetcode-cn.com)