題目描述:
最長連續(xù)無重復(fù)子字符串
Example 1:
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3.
解題思路:
我們只需要記錄蟆豫,當(dāng)前字符是否出現(xiàn)在hashmap中养筒,出現(xiàn)的最后的位置是哪里(非當(dāng)前位置), 還有連續(xù)無重復(fù)子字符串長度區(qū)間的最左邊界闷畸。
因?yàn)橹灰虚g出現(xiàn)過重復(fù)序列(abcdda)甲雅,往后的更新(da)就跟重復(fù)序列前面的字符(abcd)毫無關(guān)系了拳恋。
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
ans = 0
left = 0
tab = {} # hashmap
for i, j in enumerate(s):
if j in tab and tab[j] >= left: # 如果j字符在hashmap中出現(xiàn)過驼修,并且j在map中對應(yīng)的值大于等于區(qū)間的左指針宏所,意味著出現(xiàn)重復(fù)序列
left = tab[j] + 1 #更新區(qū)間的最左邊界
tab[j] = i # 更新j字符的最右出現(xiàn)過的位置
ans = max(ans, i - left + 1) #比較最長序列
return ans