Python版-LeetCode 學習:無重複字符的最長子串

 

 

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

示例 1:

輸入: "abcabcbb"
輸出: 3 
解釋: 因爲無重複字符的最長子串是 "abc",所以其長度爲 3。
示例 2:

輸入: "bbbbb"
輸出: 1
解釋: 因爲無重複字符的最長子串是 "b",所以其長度爲 1。
示例 3:

輸入: "pwwkew"
輸出: 3
解釋: 因爲無重複字符的最長子串是 "wke",所以其長度爲 3。
     請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。

 


解法一:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        
        if s=='':
            return 0
        str_dict={}
        start, length=0,0
        
        for j in range(len(s)):
            if s[j] in str_dict:
                start=max(str_dict[s[j]],start)
            length=max(length,j-start+1)
            # 不是下標索引是序列(第幾個)
            str_dict[s[j]]=j+1
            

        return length

思考:如果用j-start替換掉 j-start+1,則還需要修改哪些地方?爲什麼?

 

方法二:

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if len(s)<=1:
            return len(s)
        
        length, start, c_dict = 0, -1, {}
        for i, c in enumerate(s):
            if c in c_dict and start <c_dict[c]:
                start=c_dict[c]
                c_dict[c]=i
            else:
                c_dict[c]=i
                if length < i-start:
                    length=i-start
        return length

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章