'''while这段代码结果是不断从左缩小窗口,直到窗口中不存在与下一个字符重复的字符。一直到while结束,这时的curlen就代表从0到i,包含s[i]元素的最长子串长度。当遍历完成后,我们就知道虽有带着i的最长子串长度,从中选取max即可。'''
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
n=len(s)
if n<=1:
return n
left,curlen,maxlen=0,0,0
lookup=set()
for i in range(n):
curlen+=1
while s[i] in lookup:
lookup.remove(s[left])
left+=1
curlen-=1
if curlen>maxlen:maxlen=curlen
lookup.add(s[i])
return maxlen