03.無重複字元的最長子串-python
阿新 • • 發佈:2018-12-11
題目
給定一個字串,找出不含有重複字元的最長子串的長度。
示例:
輸入: "abcabcbb"
輸出: 3
解釋: 無重複字元的最長子串是 "abc",其長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 無重複字元的最長子串是 "b",其長度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 無重複字元的最長子串是 "wke",其長度為 3。
請注意,答案必須是一個子串,"pwke" 是一個子序列 而不是子串。
解法:
迴圈字串,每次迴圈通過計算到最近的無重複的字串距離得到當前值往回所能達到的最大長度。每次迴圈檢視當前值的最大長度是否是目前的最大長度。
示例
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
# {當前值:索引}
d = {}
# 當前無重複字串長度
length = 0
# 最大無重複字串長度
max_length = 0
# 最近的無重複的字串索引
star = 0
for i in range(len(s)):
# 判斷當前值是否重複,且重複位置是否在最近無重複字串左邊
if s[i] in d and d[s[i]] >= star:
star = d[s[i]] + 1
# 當前長度
length = i - star + 1
d[s[i]] = i
max_length = max(max_length, length)
return max_length