滑动窗口
方法一滑动窗口
定义两个指针,右指针负责扩充窗口,左指针负责收缩窗口。当扩张的过程中遇到了重复,就需要收缩到直到把重复的字符移除出去。
参考代码
class Solution:def lengthOfLongestSubstring(self, s: str) -> int:l = len(s)left,right,ans = 0,0,0win = set()while right < l:if s[right] not in win:win.add(s[right])ans = max(ans,right - left + 1)else:while s[left] != s[right]:win.remove(s[left])left += 1left += 1right += 1return ans
复杂度分析
时间复杂度 O(n) n为数组长度,左指针和又指针会分别遍历一遍
空间复杂度 O(m) m为字符集长度
