今天很低产,做了一道题。
只想说一句,去你妈的。
最后一例没有过,时间超出限制。
按理说,时间复杂度也就应该是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]