Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be asubstring, "pwke"
is a subsequence and not a substring.
这个题就是求最小不重复的子字符串
代码如下:
class Solution(object): def lengthOfLongestSubstring(self, s): temp = result = '' for i in s: if i not in temp: temp += i else: index = temp.index(i) temp = temp[index + 1: ] + i if len(result) < len(temp): result = temp return len(result) 思路是:迭代字符串中的所有字符
如果不重复则依次将字符存入临时变量中
如果重复了则将重复字符串之前的字符移除并且加入当前字符,形成新字符串
然后对比是否之前得到最长字符串是最长的,如果不是则更新最长字符串
最后返回字符长度
时间复杂度O(n)官网有一个vote最多的python解是class Solution: # @return an integer def lengthOfLongestSubstring(self, s): start = maxLength = 0 usedChar = {} for i in range(len(s)): if s[i] in usedChar and start <= usedChar[s[i]]: start = usedChar[s[i]] + 1 else: maxLength = max(maxLength, i - start + 1) usedChar[s[i]] = i return maxLength
他的思路是和我相仿,时间复杂度和我一样,但是空间复杂度比我的高
新闻热点
疑难解答