R5-滑动窗口篇
这还是个不定长的滑动窗口
你要检验是否出现过一个字母,用哈希表能做到O(1)
遍历左指针,对于右指针也是遍历(分两种情况,情况1:没存在过,直接right+1;情况2:存在过,必须跳出去)
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
n=len(s)
if n<2:
return n
mx=1
for left in range(n-1):
right=left+1
dict=defaultdict(int)
dict[s[left]]=1
while right<n:
if s[right] not in dict:
dict[s[right]]=1
right+=1
else:
mx=max(right-left,mx)
break
if right==n:
mx=max(right-left,mx)
return mx
学习k神做法
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
dict={}
ret=0
i=-1
for j in range(len(s)):
if s[j] in dict:
i=max(dict[s[j]],i)
dict[s[j]]=j
ret=max(ret,j-i)
return ret
原理好像是,两个相同的字母之间的就是最大非重复子串。cool