Python 按字母顺序排列的最长字符串
此代码适用于所有字符串,但需要最后一个字符的字符串除外Python 按字母顺序排列的最长字符串,python,python-2.7,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 s
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)
你如何建议这样做的可能性
提前谢谢大家
附言:
谢谢你迄今为止的回答。问题是,无论我键入哪个范围,我将打印的子变量都不能得到我想要的所有字符。循环在以下时间之前完成:\n可能是程序本身有问题
有额外的提示吗?:) 您的问题在于
范围(len(s)-1)
。“范围”生成一个上限参数值为-1的列表,因此不需要将1减去len,使用:
从
范围(停止)
范围(开始、停止[步进])
这是一个多功能函数,用于创建包含算术级数的列表。它最常用于for循环。这些论点必须是正确的
必须是纯整数。如果省略步骤参数,则默认为1。
如果省略start参数,则默认为0。完整表格
返回纯整数列表[start,start+step,start+2]*
步骤,…]。如果步骤为正,则最后一个元素是最大的起点
+i*比停止少一步;如果步长为负值,则最后一个元素是大于停止的最小开始+i*步长。阶跃不得为零
另一方面,您将问题标记为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)
还有几点建议
另外,在
print'Logest substring…
中有一个打字错误,它应该是最长的
(如标题中所示)/吹毛求疵谢谢你的回答,巴勃罗。问题是,无论我键入哪个范围,我将打印的子变量都不能得到我想要的所有字符。循环在以下时间之前完成:\n可能是程序本身有问题。@makemesteaks:这是因为您在sub完成循环中的检查之前将测试分配给了它。因此,最后一次检查成功,但更新的字符串未分配给sub.:)@makemesteaks您的算法需要迭代到多个字符才能分配最后的结果。尝试:对于范围内的i(len)+1):n=i%len(s)
谢谢Rajan!检查我下面的答案。我刚刚将检查分配到循环的末尾,现在我将检查不同的情况,我将为您更新工作人员的感谢。如果我将If len(test)>len(sub):sub=test
移动到循环的末尾,它也不起作用。另外,您的编辑代码不适用于其他一些测试用例,例如:s='ocunhyfwiyizqh'应该是cu,而我得到oo。对不起,伙计们,但这已经成为一件让人头疼的事了。
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)