s为任意字符串
初期思路为对s进行遍历循环,把未重复时的子串存储于一个列表,将该列表长度储存于另一个列表。
得到代码1(考虑不完全)
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
l1 = [i for i in s]
l2 = []
l3 = []
for i in l1:
if i not in l2:
l2.append(i)
else:
l3.append(len(l2))
l2.clear()
return max(l3)
这里发现忽略了最后剩下的一部分字符由于没出现重复字符串导致没有将最后一部分长度储存于列表3中,并且出现重复字符是并没有对于重复字符进行储存
例如字符串为’pwwkew’的情况下 后面’kew’长度没有进行存储
在此基础上得到代码2(考虑不完全)
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
l1 = [i for i in s]
l2 = []
l3 = []
for i in l1:
if i not in l2:
l2.append(i)
else:
l3.append(len(l2))
l2.clear()
l2.append(i)
l3.append(len(l2))
return max(l3)
这里又有新问题
假设给定字符串为’dvdf’
该代码只会将重复字符前全部删除,忽略了两重复字符间的部分
于是我考虑遍历删除,只是将重复字符以及之前的内容删掉,而不是用clear一次性删除
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
l1 = [i for i in s]
l2 = []
l3 = []
for i,item in enumerate(l1):
if item not in l2:
l2.append(item)
else:
l3.append(len(l2))
for j in l2:
if item!=j:
l2.remove(j)
else:
l2.remove(j)
break
l2.append(item)
l3.append(len(l2))
return max(l3)
这里我用for循环遍历删除,于是出现了跳过字符的情况下,改为while循环
得到最终代码
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
l1 = [i for i in s]
l2 = []
l3 = []
j=0
for i,item in enumerate(l1):
if item not in l2:
l2.append(item)
else:
l3.append(len(l2))
while True:
if item!=l2[j]:
l2.remove(l2[j])
else:
l2.remove(l2[j])
break
l2.append(item)
l3.append(len(l2))
return max(l3)
最后就是这么个结果