class Solution:
def get_length_by_longest_substring(self, s:str)-> int:
res, tmp = 0, 0
dic = {}
# res: 存儲最長長度
# tmp: 當(dāng)前窗口的長度
# j: 當(dāng)前遍歷的字符的位置
# i: 當(dāng)前遍歷的字符的上個(gè)位置滔蝉, 默認(rèn)沒出現(xiàn)過就是-1
# dic: 維護(hù)每個(gè)字符的最后出現(xiàn)的位置
for j in range(len(s)):
i = dic.get(s[j], -1)
dic[s[j]] = j
if tmp < j - i:
tmp += 1
else:
tmp = j - i
res = max(res, tmp)
return res
s = "abcabcdbb"
res = Solution().get_length_by_longest_substring(s)
print(res) # 4
時(shí)間復(fù)雜度:O(n)
空間復(fù)雜度:O(1)