LCR 016. 無重複字元的最長子串(中)

Frommoon發表於2024-03-14

目錄
  • 題目
  • 題解:滑動視窗

題目

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

示例 1:

輸入: s = "abcabcbb"
輸出: 3
解釋: 因為無重複字元的最長子字串是 "abc",所以其長度為 3

示例 2:

輸入: s = "bbbbb"
輸出: 1
解釋: 因為無重複字元的最長子字串是 "b",所以其長度為 1。

示例 3:

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

示例 4:

輸入: s = ""
輸出: 0

題解:滑動視窗

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        window={}## 儲存滑動視窗中各個字元的出現次數
        left=0# 滑動視窗的左指標
        right=0# 滑動視窗的右指標
        cnt=0#儲存結果
        while right<len(s):
            c=s[right] # 當前字元
            right+=1# 右指標右移
            window.setdefault(c, 0)#訪問不存在的鍵時自動建立並將值設定為 0
            window[c]+=1# 更新滑動視窗中當前字元的出現次數
            while(window[c]>1):#當滑動視窗中的字母出現次數大於1時說明存在重複字元
                d=s[left]# 將要移出視窗的字元
                left+=1# 左指標右移
                window[d]-=1# 更新滑動視窗中移出字元的出現次數
            cnt=max(cnt,right-left)#更新答案:收縮視窗完後保證了視窗中沒有重複元素
        return cnt

相關文章