题目描述
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = “leetcode”
返回 0.
s = “loveleetcode”,
返回 2.
注意事项:您可以假定该字符串只包含小写字母。
解题思路
引入排序字典,统计字符串中各字符出现的次数,随后遍历此字典,找到第一个计数为1的key,返回其在字符串中的下标。若没有计数为1的key,则返回-1。
代码
class Solution:
def firstUniqChar(self, s: str) -> int:
if s=="":
return -1
else:
from collections import OrderedDict
d=OrderedDict({key:value for key in s for value in [0]})
for item in s:
d[item]+=1
ans=""
for key,value in d.items():
if value==1:
return s.find(key)
else:
return -1
结果
反思
目前执行最快的代码如下:
letters='abcdefghijklmnopqrstuvwxyz'
index=[s.index(l) for l in letters if s.find(l) != -1 and s.find(l) == s.rfind(l)]
return min(index) if len(index) > 0 else -1
其思路是,针对字母表中的字母,在字符串中如果正向寻找和反向寻找的索引相同,则将其索引放入索引列表中,然后返回索引中最小的,即最靠前的。如果索引列表为空,则返回-1。