Leet-Code 无重复字符的最长子串

给定一个字符串,找出不含有重复字符的最长子串的长度。

示例:

给定 “abcabcbb” ,没有重复字符的最长子串是 “abc” ,那么长度就是3。

给定 “bbbbb” ,最长的子串就是 “b” ,长度是1。

给定 “pwwkew” ,最长子串是 “wke” ,长度是3。请注意答案必须是一个子串,”pwke” 是 子序列 而不是子串。

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        length = 0
        i = 0
        while i < len(s):
            string = ""
            for c in s[i:]:
                if c in string:
                    if len(string) > length:
                        length = len(string)
                    break
                string += c
            else:
                if len(s[i:]) > length:
                    length = len(s[i:])
            i += 1
        return length

要求返回最大长度,所以不用保存子串,定义一个变量length = 0,当新的子串长度大于当前值,重新赋值给length.
定义一个空字符串string = “”

for c in s:
    if c in string:
        break
    string += c

由此可获得s字符串的第一个无重复有序子串
用while循环可获得s字符串的所有无重复有序子串

if c in string:
    if len(string) > length:
        length = len(string)
    break

这里每次得到的子串不保存,如果子串长度大于length,保存值到length
这是s[i:]有重复的情况下,若s[i:]整个无重复
for循环顺序执行完毕,没有被跳出,执行for else部分

if len(s[i:]) > length:
   length = len(s[i:])

判断是否大于length,大于则赋值给length
整个while循环执行完毕后,s的每个无重复子串的长度都参与了比较,最大值被保存在length中
return length

猜你喜欢

转载自blog.csdn.net/brook_/article/details/80193540