给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 “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