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

问题描述

Leetcode#3最长的子字符串,没有重复的字符

问题: 给定一个字符串,找到最长子字符串的长度而不重复字符。

我的代码

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。将不胜感激!

解决方法

您永远不会将找到的最后一个子字符串附加到list_int。您可以在for循环之后添加如下内容来解决该问题:

if st:
    list_int.append(len(st))

此外,行st=s[n]不太正确。考虑输入dvdf。当您浏览时,st将从''变成'd'变成'dv',最后我们会发现{{ 1}}。我们应该尝试从s[2] == 'd'开始,最终找到st,但是我们只是从当前字符开始。修复另一种(昂贵)的方法是在else块中,找到重复的 last 外观的位置,然后从那里开始工作。即,代替v进行以下操作:

vdf

将所有内容放在一起,您将得到以下内容:

st=s[n]

一旦工作,就会出现其他性能和样式问题。您可能需要将完成的代码发布到code review stackexchange