按字母顺序排列的最长字符串

时间:2014-06-23 07:03:27

标签: python python-2.7

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

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:

感谢目前为止的答案。问题在于,无论我输入哪个范围,我将打印的子变量都没有得到我想要的所有字符。循环结束之前:\可能它是程序本身的问题。

任何额外提示? :)

3 个答案:

答案 0 :(得分:3)

您的问题出在range(len(s)-1)。范围生成一个列表,其上限参数值为1,因此您不需要减去1到len(s),使用:

range(len(s))

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

  

范围(停止)   范围(开始,停止[,步骤])   这是一个用于创建包含算术进度的列表的通用函数。它最常用于for循环。争论必须   是简单的整数。如果省略step参数,则默认为1。   如果省略start参数,则默认为0.完整表单   返回普通整数列表[start,start + step,start + 2 *   步, ...]。如果step为正,则最后一个元素是最大的开始   + i *步骤少于停止;如果step为负数,则最后一个元素是最小的start + i * step大于stop。步骤不能为零

另一方面,您将问题标记为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)

答案 1 :(得分:0)

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]

答案 2 :(得分:0)

您可以使用以下代码:

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. 在迭代时希望列表的索引使用枚举。