【100Days of 100 line Code】6 day

今天很低产,做了一道题。

只想说一句,去你妈的。

最后一例没有过,时间超出限制。

按理说,时间复杂度也就应该是O(n),但是没过。好吧,不说这些了。

LeetCode #3 无重复字符的最长子串

创建新列表new_list,储存每个字符能组成的最长字符串的长度。

创建新字符串new_str,作为对比字符串。

创建断点seat

对比字符串长度lenght可以后面写出 new_list.append(len(new_str)),我这里就不改了。便于可读。

算法部分。

遍历一次字符串s,判断是否在对比字符串当中。

不在的话,更新对比的字符串(新的对比字符串即为断点之后到s[i]),并将长度储存到new_list[i](表示s[i]可以组成无重复最长子串的长度)

在的话,即对比字符串与即将加入的s[i]字符有重复。

遍历s[i]之前的字符串,找的最后一个和s[i]重复的字符。

更新seat,更新对比字符串,并将长度储存到new_list[i]之中。

最后在对new_list进行排序,返回最大值即可。

重复的代码有点多,为了简介可以创建一个新的函数更新数据。

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        if s == '':
            return 0
        new_list = []
        new_str = ''
        length = 0
        seat = 0for i in range(len(s)):
            if s[i] not in new_str:   
                new_str = s[seat:i+1]
                length = len(new_str)
                new_list.append(length)else :
                for j in range(i):
                    if s[i] == s[j]:
                        seat = j + 1        
                new_str = s[seat:i+1]
                length = len(new_str)
                new_list.append(length)
        new_list.sort()
        return new_list[-1]
原文地址:https://www.cnblogs.com/mygzhh/p/9315793.html