[英]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)
还有一些指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.