1. 程式人生 > >leetcode(3)無重複字元的最長子串

leetcode(3)無重複字元的最長子串

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