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
他的思路是和我相仿,时间复杂度和我一样,但是空间复杂度比我的高