簡體   English   中英

字母順序最長的字符串

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

還有一些指針。

  1. Python字符串是可迭代的。 即您可以遍歷它們。
  2. 在迭代時想要列表的索引時,請使用enumerate。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM