無重復(fù)字符的最長子串
給定一個字符串,找出不含有重復(fù)字符的最長子串的長度。
輸入: "abcabcbb"
輸出: 3
解釋: 無重復(fù)字符的最長子串是 "abc",其長度為 3。
輸入: "bbbbb"
輸出: 1
解釋: 無重復(fù)字符的最長子串是 "b",其長度為 1。
輸入: "pwwkew"
輸出: 3
解釋: 無重復(fù)字符的最長子串是 "wke",其長度為 3。
請注意,答案必須是一個子串,"pwke" 是一個子序列 而不是子串。
遍歷字符串中的每一個元素。借助一個輔助鍵值對來存儲某個元素最后一次出現(xiàn)的下標(biāo)。用一個整形變量存儲當(dāng)前無重復(fù)字符的子串開始的下標(biāo)。
時間復(fù)雜度O(n),空間復(fù)雜度O(n)。
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
res = 0
if s is None or len(s) == 0:
return res
d = {}
tmp = 0
start = 0
for i in range(len(s)):
if s[i] in d and d[s[i]] >= start:
start = d[s[i]] + 1
tmp = i - start + 1
res = max(res, tmp)
d[s[i]] = i
return res