繁体   English   中英

如何检查重复项之间的整个字符串?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM