给定一个字符串,返回最长的不包含重复字符子串
例:
输入 : "abcabcbb"
返回:3 ("abc"为最长的非重复字符子串)
输入 : "dvdf"
返回:3 ("vdf"为最长的非重复字符子串)
解法1 (比较容易理解):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
str_list = []
max_len = 0
for x in s:
if x in str_list:
str_list = str_list[str_list.index(x)+1:]
str_list.append(x)
max_len = max(max_len , len(str_list))
return max_len 解法2:
def lengthOfLongestSubstring(self, s):
dct = {}
max_so_far = curr_max = start = 0
for index, i in enumerate(s):
if i in dct and dct[i] >= start:
max_so_far = max(max_so_far, curr_max)
curr_max = index - dct[i]
start = dct[i] + 1
else:
curr_max += 1
dct[i] = index
return max(max_so_far, curr_max)