[英]How do I check the whole string between duplicates?
Leetcode #3 没有重复字符的最长 Substring
问题:给定一个字符串,找出最长的 ZE83AED3DDF4667DEC0DAAAACB2BB3BE0BZ 的长度,不包含重复字符。
我的代码:
def len_of_substring(s):
list_int = []
st = ''
for n in range(0, len(s)):
if s[n] not in st:
st=st+str(s[n])
list_int.append(len(st))
else:
#list_int.append(len(st))
st=s[n]
return(max(list_int))
len_of_substring('dvdf')
代码应为“vdf”返回 3,但我的代码仅返回 2。任何帮助将不胜感激!
您永远不会 append 最后一个 substring 找到list_int
。 您可以在 for 循环之后解决该问题,包括以下内容:
if st:
list_int.append(len(st))
此外,行st=s[n]
并不完全正确。 考虑输入dvdf
。 当你走过它时, st
会从''
到'd'
到'dv'
,最后我们会找到已经在st
中的字符s[2] == 'd'
。 我们应该尝试从v
重新开始以最终找到vdf
,但我们只是从当前字符开始。 一种(昂贵的)解决方法是在 else 块中找到重复出现的最后一次出现的位置并从那里开始工作。 即,代替st=s[n]
执行以下操作:
i = -1 # doesn't really matter
for j, c in enumerate(st):
if c==s[n]:
i = j
st = st[i+1:] + s[n]
把它们放在一起,你会得到这样的东西:
def len_of_substring(s):
list_int = []
st = ''
for n in range(0, len(s)):
if s[n] not in st:
st=st+str(s[n])
list_int.append(len(st))
else:
st = st[st.rfind(s[n])+1:] + s[n]
if st:
list_int.append(len(st))
return(max(list_int))
一旦你让它工作,就会有一些其他的性能和风格问题。 您可能希望将完成的代码发布到代码审查 stackexchange 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.