开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情
一、题目描述:
387. 字符串中的第一个唯一字符 - 力扣(LeetCode)
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
示例 1:
输入: s = "leetcode"
输出: 0
示例 2:
输入: s = "loveleetcode"
输出: 2
示例 3:
输入: s = "aabb"
输出: -1
提示:
- 1 <= s.length <= 10^5
- s 只包含小写字母
二、思路分析:
如果字符串里面的某一个字符出现次数为1,则对应的value就是其索引;
如果字符串里面的某一个字符出现次数大于1,则对应的value可以设置为无限大
对letter_and_frequcy字典,进行所有value取min,
如果这个min全是无限大,就说明没有只出现一次的letter,
return -1
如果有“正常”的min(范围在len(s))内
就return 这个min
三、AC 代码:
class Solution:
def firstUniqChar(self, s: str) -> int:
letter_and_frequcy={} #字典的key对应字符串中每一个字符
for i in range(len(s)):
if s[i] not in letter_and_frequcy:
letter_and_frequcy[s[i]]=i
else:
letter_and_frequcy[s[i]]=len(s)+100
vaule_list=letter_and_frequcy.values()
if min(vaule_list)<(len(s)+100):
return min(vaule_list)
else:
return -1
四、总结:
简单的哈希表,思路还是蛮清晰的哈~
也可以 使用string类自带的两个函数,find()和rfind();即从头查询与从尾查询。遍历字符串,并查找,若两个函数返回值相同,则该字符唯一。
范文参考:
来看最优解,发现自己就是最优解,不过数据结构上应该采用更高级的结构 - 字符串中的第一个唯一字符 - 力扣(LeetCode)
中间对map具体取得用法不是很熟悉,好像用了两种用法,还需要细细研究 - 字符串中的第一个唯一字符 - 力扣(LeetCode)