1. 程式人生 > >3. 無重複字元的最長子串 (滑動視窗思想)

3. 無重複字元的最長子串 (滑動視窗思想)

給定一個字串,找出不含有重複字元的最長子串的長度。

示例:

給定 "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