题目:
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。
给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。
给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。
采用Python的set,可以知道无重复子串的可能的最大长度,把可能的最大长度作为滑动窗口的初始大小,并在搜索中调节窗口大小直到找到最大无重复子串。参考代码如下:
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
len_s = len(s)
if len_s == 0:
return 0
set_s = set(s)
# get the max_size of sild window
max_len = len(set_s)
max_sub_str = ""
while max_len:
if max_len == 1:
return 1
i = 0
while i + max_len <= len_s:
sub_s = s[i:i + max_len]
set_sub = set(sub_s)
# if there is no repeat in sub string
if len(set_sub) == len(sub_s):
max_sub_str = sub_s
return(len(list(max_sub_str)))
i = i + 1
# adjust the size of window
max_len = max_len - 1
ps:如果您有好的建议,欢迎交流 :-D,也欢迎访问我的个人博客 苔原带:tundrazone.com
网友评论