滑动窗口版本:
s = ""abcabcbb""
maxslen = 0
j= 0
newstr = ''
while j < len(s):
while s[j] in newstr:
index = newstr.index(s[j])
newstr = newstr[index +1:]
newstr = newstr + s[j]
maxslen = max(maxslen, len(newstr))
j += 1
return maxslen
#hash + 双指针
#去除s[j]的循环操作。用hash表代替。
from collections import defaultdict
dicts = defaultdict(int)
i= 0
maxslen = 0
index= -1
while i < len(s):
if s[i] in dicts:
index =max(dicts[s[i]],index)
dicts[s[i]] = i
maxslen = max(maxslen,i-index)
i+=1
return maxslen
#字典替换为数组
dicts = [0]*128
index =0
maxslen = 0
for i in range(len(s)):
if dicts[ord(s[i])] == 0 :
dicts[ord(s[i])] = 1
else:
while dicts[ord(s[i])] ==1:
dicts[ord(s[index])] -= 1
index += 1
dicts[ord(s[i])] = 1
maxslen = max(maxslen,i-index+1)
return maxslen