【刷题打卡】387. 字符串中的第一个唯一字符

87 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

387. 字符串中的第一个唯一字符

给定一个字符串 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)