力扣字符串中的第一个唯一字符


给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -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

猜你喜欢

转载自blog.csdn.net/weixin_41781408/article/details/88889278