刚开始的方法是进行n此循环
每次都从头找最长的一串找到后就切割下来然后比对一下 时间复杂度是O(n^2)
但是失败了 说是时间超标
以下是代码
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
# 转化成list
z = list(s)
# 最大长度
max_length=0
# 切到最后一个停止
while(len(z)!=1):
# 临时列表
temp=[]
# 长度
temp_length=0
for i in range(len(z)):
# 出现重复
if z[i] in temp:
max_length=temp_length if temp_length>max_length else max_length
break
else:
temp.append(z[i])
temp_length+=1
z=z[temp_length:]
return max_length
改用了方法 没想到连错好几次
以下是最终代码 时间复杂度为O(n)
#第二种
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
# 转化成list
z = list(s)
# 最大长度
max_length=0
temp_z=[]
temp_length=0
for i in range(len(z)):
if z[i] not in temp_z:
temp_z+=z[i]
temp_length+=1
else:
# 这里犯得失误很多 一开始没有把当前这个字符放入临时列表中
max_length=temp_length if temp_length>max_length else max_length
# 从重复字母的后一个开始重新计算长度
index=temp_z.index(z[i])
temp_z=temp_z[index+1:]
temp_z+=z[i]
temp_length=len(temp_z)
#考虑只有一个字符的字符串
if(temp_length>max_length):
max_length=temp_length
return max_length