[英]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.