繁体   English   中英

字母顺序最长的字符串

[英]Longest string in alphabetic order

此代码对所有字符串都适用,但需要最后一个字符的字符串除外。

s='abcdefghijklmnopqrstuvwxyz'
sub =''
test =s[0]

for n in range(len(s)-1):
    if len(test) > len(sub):
        sub = test
    if s[n] >= s[n-1]:
        test += s[n]
    else:
        test = s[n]

print 'Longest substring in alphabetic order is: ' + str(sub) 

您如何建议这样做的可能性?

预先谢谢你们!

PS:

到目前为止,感谢您的回答。 问题是,无论我键入哪个范围,我将要打印的子变量都无法获得我想要的所有字符。 循环在:\\之前完成。也许这是程序本身的问题。

还有其他提示吗? :)

您的问题是range(len(s)-1) Range会生成一个列表,列表的上限参数值为1,因此您无需将len减去1,请使用:

range(len(s))

来自https://docs.python.org/2/library/functions.html#range

range(stop)range(start,stop [,step])这是创建包含算术级数的列表的通用功能。 它最常用于for循环中。 参数必须是纯整数。 如果省略了step参数,则默认为1。如果省略了start参数,则默认为0。完整格式返回纯整数列表[start,start + step,start + 2 * step,...] 。 如果step为正,则最后一个元素是最大的start + i * step小于stop; 如果step为负,则最后一个元素是大于start的最小start + i * step。 步骤不能为零

另一方面,您将问题标记为python2.7,因此我假设您使用的是2.7。 在这种情况下,使用xrange代替range会更有效,因为那样您将使用迭代器代替生成列表。

编辑

从注释到此问题,您可以将代码更改为:

s='caabcdab'
sub =''
test =s[0]

for i in range(1,len(s)+1):
    n = i%len(s)
    if len(test) > len(sub):
        sub = test
        if i >= len(s):
            break
    if s[n] >= s[n-1]:
        test += s[n]
    else:
        test = s[n]

print 'Logest substring in alphabetic order is: ' + str(sub)

enemurate而不是范围:

 s='abcdefghijklmnopqrstuvwxyz'

sub =''
test =s[0]

for n,value in enumerate(s):
    if len(test) > len(sub):
        sub = test
    if value >= s[n-1]:
        test += s[n]
    else:
        test = s[n]

您可以使用以下代码:

s = 'abcdefgahijkblmnopqrstcuvwxyz'
sub = ''
test = s[0]

for index, character in enumerate(s):
    if index > 0:
        if character > s[index - 1]:
            test += character
        else:
            test = character
    if len(test) > len(sub):
        sub = test
print 'Longest substring in alphabetic order is: ' + str(sub)

还有一些指针。

  1. Python字符串是可迭代的。 即您可以遍历它们。
  2. 在迭代时想要列表的索引时,请使用enumerate。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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