目錄
- 題目
- 題解:滑動視窗
題目
- 給定一個字串 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