leetcode 3. 無重複字元的最長子串(python)
阿新 • • 發佈:2018-11-09
給定一個字串,找出不含有重複字元的最長子串的長度。
示例 1:
輸入: "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 """ record_place = {} max_len = 0 mid_max_len = 0 for (i, ch) in enumerate(s): if ch not in record_place: mid_max_len += 1 if max_len < mid_max_len: max_len = mid_max_len else: if i - record_place[ch] > mid_max_len: mid_max_len += 1 if mid_max_len > max_len: max_len = mid_max_len else: mid_max_len = i - record_place[ch] record_place[ch] = i return max_len
程式碼二:
方法:滑動視窗,普通的滑動視窗不能過,所以在快速記錄左側視窗即可。程式碼如下
class Solution: def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ temp = 0 d = {} start = 0 for i in range(len(s)): if s[i] in d and start <= d[s[i]] : start = d[s[i]] +1 temp = max(i-start+1,temp) d[s[i]] = i return temp