【问题标题】:return longest alphabetical substring返回最长的字母子串
【发布时间】:2015-08-25 20:53:56
【问题描述】:

该程序的目的是打印变量 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 

运行时,程序不打印任何内容。我似乎没有看到代码有什么问题。任何帮助将不胜感激。

【问题讨论】:

  • 你的代码背后的逻辑是什么? SO 不是codereview 主题。
  • 请修正缩进。我想我知道你的意思,但由于你的代码不起作用,也许你正在做其他事情。
  • 答案应该是“abc”还是“abch”?

标签: python string python-2.7 alphabetical


【解决方案1】:

我会为此使用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

注意:正则表达式中的标志re.I 会导致正则表达式忽略大小写。如果这不是您想要的行为,您可以删除该标志,它只会匹配小写字符。

【讨论】:

  • 我从没想过要使用正则表达式。
【解决方案2】:

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

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

如果您修复了该缩进错误,则可以运行代码而不会出现错误,最后一行 (print longest) 确实有效,只是没有按预期工作,它只打印一个空行。

【讨论】:

  • 抱歉,缩进在网站上没有正确显示。但是它在编辑器上是正确缩进的。
【解决方案3】:

我想我明白你的意思了。

首先你需要修复代码中的缩进问题,这样才能让它运行:

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

例如:while (alphstring in alphabet) == True and n+nxtchar &lt;= 5:

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

【讨论】:

    【解决方案4】:

    这是我的解决方案:

    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
    

    【讨论】:

    • 您的解决方案似乎非常好。但我似乎无法打印最终结果。
    • 我在 if 循环之后尝试了 print s[i:j],低于 max_length。但是,每次迭代后都会打印出来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2020-03-04
    • 2018-11-28
    相关资源
    最近更新 更多