给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。
给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。
给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。
解题思路:
定义一个空列表,然后循环字符串s,每次循环获取一个字符,查看该字符是否在列表中,如果不在就添加进列表里。如果已经存在,就说明这个列表中存了一个字符子串了。计算该子串的长度,和最大值比较,更新最大值。然后留下列表中重复字符串后面的字符,往后循环到结尾。注意结尾还有算一次子串的长度和更新最大值。
代码如下:
def lengthOfLongestSubstring(self, s):
sub = []
max_length = 0
for i in s:
if i not in sub:
sub.append(i)
else:
if max_length < len(sub):
max_length = len(sub)
sub = sub[sub.index(i)+1:]
sub.append(i)
if max_length < len(sub):
max_length = len(sub)
return max_length