【Leetcode_總結】3. 無重複字元的最長子串 - python
阿新 • • 發佈:2019-01-12
Q:
給定一個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc",所以其
長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b"
,所以其長度為 1。
示例 3:
輸入: "pwwkew" 輸出: 3 解釋: 因為無重複字元的最長子串是"wke"
,所以其長度為 3。 請注意,你的答案必須是 子串 的長度,"pwke"
是一個子序列,不是子串。
連結:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/description/
思路:雙指標 慘不忍睹
程式碼:
class Solution: def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ if not s: return 0 if len(s) == len(list(set(list(s)))): return len(s) slow = 0 fast = 1 max_ = 0 while (fast < len(s)): if s[fast] not in s[slow:fast]: fast += 1 else: if fast-slow > max_: max_ = fast-slow-1 slow += 1 fast = slow if fast - slow > max_: max_ = fast - slow - 1 return max_+1
AC優秀程式碼:
class Solution: def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ list_ = [] max_ = 0 for i in s: if i in list_: del list_[0:list_.index(i) + 1] list_.append(i) else: list_.append(i) if len(list_) > max_: max_ = len(list_) return max_