暴力计算法。
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
max_length = 0
for i in range(len(s)):
string = ""
length = 0
for j in range(i, len(s)):
if s[j] not in string:
string += s[j]
length += 1
max_length = length if length > max_length else max_length
else:
break
return max_length
用移动窗口的思想,可以实现最多执行 2n 次的循环。而且击败了97.22%的人这个让我吃了一惊哈哈哈~这种做法的思想就是我们维护一个窗口 window,从第一个元素开始,每次都是尝试往正方向延伸我们的子串,都要比较是否出现重复。然后如果遇到重复的元素,就把我们维护的原有窗口中重复的元素处截断,把延伸的部分续上。例如 abca 这个串,很顺利到了 abc,然后 a 开始重复,我们就把窗口更新成 bca,以此类推。
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
string = ""
max_length = 0
for i in range(len(s)):
if s[i] not in string:
string += s[i]
if len(string) > max_length:
max_length += 1
else:
index = string.index(s[i])
string = string[index + 1:] + s[i]
return max_length