leetcode(3)無重複字元的最長子串
阿新 • • 發佈:2018-11-02
3. 無重複字元的最長子串
給定一個字串,找出不含有重複字元的最長子串的長度。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 無重複字元的最長子串是 "abc",其
長度為 3。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 無重複字元的最長子串是 "b"
,其長度為 1。
示例 3:
輸入: "pwwkew" 輸出: 3 解釋: 無重複字元的最長子串是"wke"
,其長度為 3。 請注意,答案必須是一個子串,"pwke"
是一個子序列而不是子串。
思路:
採用切分的方式,遇到重複字元時,記錄無重複字元的長度,把前面的所有字串“丟掉”然後以這個起點重新開始做切分,再遇到相同字元得到的長度與前面對比,取最大值,往復的到。
class Solution: def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ d = {} start = 0 ans = 0 for i,c in enumerate(s): if c in d: start = max(start, d[c] + 1) print("start:",start) d[c] = i print("d:",d) ans = max(ans, i - start + 1) print("ans:",ans) return ans if __name__=='__main__': a = Solution() s = str('pwwkew') ans = a.lengthOfLongestSubstring(s) print(ans) d: {'p': 0} ans: 1 d: {'p': 0, 'w': 1} ans: 2 start: 2 d: {'p': 0, 'w': 2} ans: 2 d: {'p': 0, 'w': 2, 'k': 3} ans: 2 d: {'p': 0, 'w': 2, 'k': 3, 'e': 4} ans: 3 start: 3 d: {'p': 0, 'w': 5, 'k': 3, 'e': 4} ans: 3 3 Process finished with exit code 0