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

猜你喜欢

转载自blog.csdn.net/litchi666/article/details/81186795