3. 無重複字元的最長子串 (滑動視窗思想)
阿新 • • 發佈:2019-01-24
給定一個字串,找出不含有重複字元的最長子串的長度。
示例:
給定 "abcabcbb"
,沒有重複字元的最長子串是 "abc"
,那麼長度就是3。
給定 "bbbbb"
,最長的子串就是 "b"
,長度是1。
給定 "pwwkew"
,最長子串是 "wke"
,長度是3。請注意答案必須是一個子串,"pwke"
是 子序列 而不是子串。
class Solution: def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ ''' python 滑動視窗 list[1:3] 不包括右端,左閉右開 ''' str_list = list(s) i, j = 0, 0 n = len(str_list) max_length = 0 tem_length = 0 while i < n and j < n: if not str_list[j] in str_list[i:j]: j += 1 tem_length = j - i if max_length <= tem_length: max_length = tem_length else: # i += 1 最右端的字母如果在當前滑動視窗中, # 則左指標指向該字母在視窗中的位置的下一個 +1 i = str_list[i:j].index(str_list[j])+i+1 return max_length