leetcode 第3题(Longest Substring Without Repeating Characters)

582 阅读1分钟
给定一个字符串,返回最长的不包含重复字符子串


例:

输入 : "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)