leetcode 劍指 Offer 48. 最長不含重複字元的子字串

郭子不想改bug發表於2020-11-16

題目描述:

請從字串中找出一個最長的不包含重複字元的子字串,計算該最長子字串的長度。

思路:

1、每次重複的片段命名為split,關鍵是要更新split
2、split的取值是從上次重複位置的第二個開始取值
3、返回anslist里長度最大的split

程式碼:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if len(s) < 2:#s可能為空字串或者只包含一個字元的字串
            return len(s)
        spit = ''
        anslist = []
        i = 0
        while i < len(s): #這是跳出大迴圈的條件
            while i < len(s) and s[i] not in spit:#split的條件按
                spit += s[i]
                i += 1
            anslist.append(spit)
            if i < len(s):
                re_position = spit.find(s[i])
                if re_position != -1:#如果能找到重複的位置
                    spit = spit[re_position+1:]#如果是最後一個位置,那麼split為空
        ans = max([0] + [len(x) for x in anslist])#[0]的意思是,可能為空字串或者全為空格的字串
        return ans

收穫:

1、find函式的用法
2、簡便的返回ans,而不用再開一個陣列

相關文章