思路:
这道题的基本思路是遍历字符串,从第一个元素开始检查是否存在重复的情况,找到第一个只出现一次的字符返回其索引。这道题和之前刷过的“两数字之和”都可以使用字典的方法储存遍历到的元素。遍历字符串中的字符,怎样去检查重复的情况?整体思路是通过设置字典,字典的key是遍历到的当前字符,字典的value代表当前字符出现过的次数。如果遍历到的元素存在于字典中,则将其value值增加1,便于后续筛选。
补充知识:
学习了文章:python enumerate的详解_for index,s in enumerate-CSDN博客
Python中的内置函数enumerate()
相关用法:
代码示例(列表):
s=[6,7,8,2,3]
for i in enumerate(s):
print(i)
输出结果:
代码示例(元组):
s=(6,7,8,2,3)
for i in enumerate(s):
print(i)
输出结果:
代码示例(字符串):
s="Box"
for i in enumerate(s):
print(i)
注意:
1.审题一定要仔细:如果不存在,则返回-1,因此最后别忘了return -1
2.这里访问索引不是通过之前的char(即dict[char]) ,而是通过dict[value] 访问,但本质都是字符串s的字符
for index,value in enumerate(s):
if dict[value]==1:
return index
代码
class Solution(object):
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
dict={}
#第一次遍历字符串,统计好每一个字符出现过的次数,便于后续筛选
for char in s:
if char in dict:
dict[char]+=1
else:
dict[char]=1
#第二次遍历字符串进行进一步的筛选
for index,value in enumerate(s):
if dict[value]==1:
return index
return -1