返回最长的字母子字符串



程序的目的是打印变量s中按字母顺序排列的最长的子字符串。

s ='abchae'
currentlen = 0
longestlen = 0
current = ''
longest = ''
alphabet = 'abcdefghijklmnopqrstuvwxyz'
for char in s:
    for number in range(0,len(s)):
    if s[number] == char:
        n = number 
    nxtchar = 1        
    alphstring = s[n] 
    while alphstring in alphabet == True and n+nxtchar <= 5:
        alphstring += s[n+nxtchar]
        nxtchar += 1
        currentlen = len(alphstring)
        current = alphstring
        if currentlen > longestlen:
            longest = current
print longest 

运行时,程序不打印任何内容。我似乎看不出代码有什么问题。

我将使用regex

import re
string = 'abchae'
alphstring = re.compile(r'a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*', re.I)
longest = ''
for match in alphstring.finditer(string):
    if len(match.group()) > len(longest):
        longest = match.group()
print(longest)
输出:

abch

注意:regex表达式中的re.I标志会使regex忽略大小写。如果这不是期望的行为,您可以删除标志,它将只匹配小写字符。

就像Kasramvd说的,我不明白你代码背后的逻辑。你确定你的代码可以在没有触发IndentationError的情况下运行吗?据我所知,以下部分(第二行,有错误的缩进)。

for number in range(0,len(s)): if s[number] == char: n = number

如果你修复了缩进错误,你可以运行你的代码没有错误,最后一行(print longest)确实工作,它只是不像你期望的那样工作,它只打印一个空白行。

我想我明白你的意思了。

首先,您需要修复代码中的缩进问题,这将使它运行:

for number in range(0,len(s)): if s[number] == char: n = number

第二,该条件将返回两个数字04,因为as中出现了两次。我相信你只需要第一个,所以你应该在找到匹配后添加一个break语句。

for number in range(0,len(s)): if s[number] == char: n = number break

最后,alphstring in alphabet == True将始终返回False。因为alphabet永远不会是True,所以您需要括号来完成此工作或删除== True

ex: while (alphstring in alphabet) == True and n+nxtchar <= 5:

我相信你正在寻找字符串abch,这是我通过这些更改获得的

这是我的解决方案:

result = ""
s = 'abchae'
alphabet = 'abcdefghijklmnopqrstuvwxyz'
max_length=0
for i in range(len(s)):
    for j in range(len(s)):
        if s[i:j] in alphabet and len(s[i:j])>max_length:
            max_length = len(s[i:j])
            result = s[i:j]
print result

最新更新