字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = “leetcode”
返回 0.
s = “loveleetcode”,
返回 2.
注意事项:您可以假定该字符串只包含小写字母。
思路
思路1
1.将字符串循环一遍,找到次数为一次的。然后返回下标。找不到的返回-1。
代码片
class Solution:
def firstUniqChar(self, s: str) -> int:
l=len(s)
if l==0:
return -1
if len(s)==1:
return 0
for i in range(l-1):
if s[i] not in s[s.index(s[i])+1:]:
return i
else:
continue
if s[l-1] not in s[:l-1]:
return l-1
return -1
#下边的思路对了但是超时间了。
# l=len(s)
# for i in range(l):
# if s.count(s[i])==1:
# return i
# else:
# continue
# return -1
思路2
大佬的代码。 因为都是小写字母,所以给了一个所有字母的字符串,然后遍历所有的字母,如果字母在字符串s中出现的次数为一,然后记录到数组中去。然后找到最小索引的返回。如果没有就返回-1.
代码片
class Solution:
def firstUniqChar(self, s: str) -> int:
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
思路3
看了大佬的代码。然后写了一个不使用数组的代码,执行效率还行,思路差不多
代码片
class Solution:
def firstUniqChar(self, s: str) -> int:
letters='abcdefghijklmnopqrstuvwxyz'
minindex=len(s)
for t in letters:
if s.count(t)==1:
if minindex>s.index(t):
minindex=s.index(t)
if minindex==len(s):
return -1
else:
return minindex