此代码适用于所有字符串,但需要最后一个字符的字符串除外。
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:
感谢目前为止的答案。问题在于,无论我输入哪个范围,我将打印的子变量都没有得到我想要的所有字符。循环结束之前:\可能它是程序本身的问题。
任何额外提示? :)
答案 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)
也有一些指示。