class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
if not s: return 0
n = len(s)
#动态规划
dic = {}
res, tmp = 0, 0
for j in range(n):
i = dic.get(s[j], -1)
dic[s[j]] = j
tmp = tmp + 1if tmp < j-i else j-i
res = max(tmp, res)
return res
'''
#普通的滑动窗口
i = 0
res = 0
while i < n:
j = i
seen = set()
count = 0
while j < n and s[j] not in seen:
seen.add(s[j])
count += 1
j += 1
res = max(res, count)
i += 1
return res
'''