class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
# 滑动窗口
n = len(s)
if n==0:
return 0
left = 0
right = 0
# 存储每个字符最后出现的位置
cur = {}
ans = 0
while right < n:
if s[right] in cur:
# 如果这个字符在里面,直接更新左边界为他的下一个
left = max(left,cur[s[right]]+1)
cur[s[right]] = right
ans = max(ans,right-left+1)
right += 1
return ans
旧题解
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
# 滑动窗口 双指针
# 左边从窗口出去,此时要把某个值-1
# 字典存当前的元素存在的个数
"""
left = 0
right = 0
window = collections.deque()
res = 0
while right<len(s):
if s[right] not in window:
window.append(s[right])
right += 1
else:
window.popleft()
left+=1
res = max(res,len(window))
return res
"""
left = 0
right = 0
window = {}
res = 0
while right<len(s):
cur = s[right]
if cur not in window:
window[cur] = 0
window[cur] += 1
right += 1
while window[cur]>1:
d = s[left]
window[d] -= 1
left += 1
res = max(res,right-left)
return res