力扣 NO.384 字符串中的第一个唯一字符(哈希表;Counter()的使用)

题目链接

在这里插入图片描述

方法一:使用哈希表存储频数,Counter()方法

请添加图片描述

import collections
class Solution:
    def firstUniqChar(self, s: str) -> int:
        frequency = collections.Counter(s) # 获取频数字典
        for i,x in enumerate(s):
            if frequency[x] ==1:  # 如果是不重复字符
                return i # 返回该字符下标
        return -1 # 没有则返回-1

方法二:使用哈希表存储频数,不使用Counter()

请添加图片描述

class Solution:
    def firstUniqChar(self, s: str) -> int:
        position = {}
        n = len(s)
        # 创建位置字典:键:字符,值:唯一字符首次出现的索引,i:字符首次出现的位置,-1:字符多次出现
        for i,ch in enumerate(s):
            if ch in position:  # 使用 in 判断字符在不在字典的键中 
                position[ch] = -1 # 在,字符出现多次,改值为-1
            else:
                position[ch] = i # 不在,字符首次出现,添加该字符,及位置i
        min_first = n #最小的首次出现的位置
        # 遍历字典的值,更新min_first
        for pos in position.values():
            if pos != -1:
                min_first = min(pos,min_first)
        if min_first == n: # 最小首次出现位置未更新
            min_first = -1
        return min_first
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值