【LeetCode-003】Longest Substring Without Repeating Characters

GitHub: https://github.com/zhangjipinggom/LeetCode
1. 问题描述:

2. 解决办法:
 

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        length = len(s)
        if length == 0 or length == 1:
            return length
        else:
            for out_int in range(length, 0, -1):
                for offset in range(length - out_int + 1):
                    substring = s[offset: offset + out_int]
                    if len(set(substring)) == len(substring):
                        return out_int

    def lengthOfLongestSubstring2(self, s):
        """
        :type s: str
        :rtype: int
        """
        start, maxLength = 0, 0
        usedChar = {}

        for i in range(len(s)):
            if s[i] in usedChar and usedChar[s[i]] >= start:            # this is the condition renew the start
                start = usedChar[s[i]] + 1
            else:
                maxLength = max(maxLength, i - start + 1)

            usedChar[s[i]] = i
        return maxLength

    def lengthOfLongestSubstring3(self, s):
        """
        :type s: str
        :rtype: int
        """
        longest, start, visited = 0, 0, [False for _ in range(256)]           # ASCII is 8 bit
        for i, char in enumerate(s):
            if visited[ord(char)]:               # ord("a") Return the Unicode code point for a one-character string
                while char != s[start]:
                    visited[ord(s[start])] = False
                    start += 1
                start += 1
            else:
                visited[ord(char)] = True
            longest = max(longest, i - start + 1)
        return longest


3. 个人记录:
(1) 方法1是自己第一时间想到的,非常暴力,不断向右平移,max_length从大到小,遇到最大的直接返回,这样的问题在于:
时间复杂度和空间复杂度都很高,极端的情况,时间复杂度为O(n**2), 空间复杂度为O(n)。
但是对于那种max_length == length 的情况就会很快;
(2)时间复杂度减少,利用的点:dict对于同一个key自动更新其值;
 但是特别需要注意第一个判断条件
(3)时间复杂度比方法2多了一个常数,但是空间复杂度对于很长的那种字符串就减少了很多,不管你的字符串有多长,我的八位的ASCII字符足以对付
方法2和方法3豆要特别注意start的位置及如何更新

猜你喜欢

转载自blog.csdn.net/zhangjipinggom/article/details/84865951