LeetCode題目總結-滑動窗口法
滑動窗口法:此方法首先建立一個長度為零的窗口,把右側窗口向右移動,當新的元素與原來窗口中的元素不重復時,把新的元素加入其中,並更新窗口長度;當新的元素與原集合中的元素重復時,把窗口的左側向右移動,直至原窗口中的元素不含新的元素。
3. 無重復字符的最長子串
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if not s: return 0 start, end = 0, 0 res, lookup = 0, set() while start < len(s) and end < len(s): if s[end] not in lookup: # 最新碰到的字符串中沒有出現過
lookup.add(s[end]) # 記錄下當前子串新增的字符
res = max(res, end-start+1) # 更新最大長度
end += 1 # 窗口向后滑動
else: # 新的字符在以前已經出現過了,窗口的左側從左向右移動,直到原字符串不包含新的字符串
lookup.discard(s[start]) start += 1
return res