3. 無重複字元的最長子串
給定一個字串
s
,請你找出其中不含有重複字元的 最長子串的長度。示例 1:
輸入: s = "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子串是 "abc"
,所以其長度為 3。
示例 2:
輸入: s = "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子串是 "b"
,所以其長度為 1。
示例 3:
輸入: s = "pwwkew" 輸出: 3 解釋: 因為無重複字元的最長子串是"wke"
,所以其長度為 3。 請注意,你的答案必須是 子串 的長度,"pwke"
是一個子序列,不是子串。
🔹設計時間複雜度為O(n)的演算法解決問題
🔸解題思路
1.建立一個 Set資料結構numSet
set可以去重避免排序時有重複數字出現
用Set記錄字元出現的情況
2.left,right=0,0表示左右指標滑動視窗的邊界
ans=0記錄無重複最長子串的長度
3.判斷當前字元是否在合集中出現
——如果沒有在numSet出現過
當前字元加入numSet,更新最長子串長度
——如果在numSet出現過則縮小視窗
把左邊界出現過的數去掉
左邊界往右滑動,縮小視窗長度
4.最後返回最長子串長度
✨看小破站 UP主紅桃A士 動畫解說 秒懂
✨金三銀四面試準備
✨leetcode hot100
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: numSet = set() left, right = 0, 0 ans = 0 while right < len(s): if s[right] not in numSet: numSet.add(s[right]) ans = max(ans, right - left + 1) right += 1 else: numSet.remove(s[left]) left += 1 return ans if __name__ == '__main__': a = Solution() s = 'abcabcbb' print(a.lengthOfLongestSubstring(s))