<p>我看到user5402已经很好地回答了您的问题,但是这个问题引起了我的兴趣,所以我决定重新编写您的代码。:)下面的程序使用与代码基本相同的逻辑,只是做了一些小的更改。在</p>
<p>在实际情况下避免使用索引,并直接在字符串(或其他容器对象)的内容上迭代,被认为更像python。这通常使代码更易于阅读,因为我们不必同时跟踪索引和内容。在</p>
<p>为了访问字符串中的当前和上一个字符,我们压缩输入字符串的两个副本,其中一个副本通过在开头插入空格字符来偏移。我们还将一个空格字符附加到另一个副本的末尾,这样当最长的有序子序列出现在输入字符串的末尾时,我们就不必进行特殊处理。在</p>
<pre class="lang-py prettyprint-override"><code>#! /usr/bin/env python
''' Find longest ordered substring of a given string
From http://stackoverflow.com/q/27937076/4014959
Written by PM 2Ring 2015.01.14
'''
data = [
"azcbobobegghakl",
"abcbcd",
"onyixlsttpmylw",
"pdxukpsimdj",
"yamcrzwwgquqqrpdxmgltap",
"dkaimdoviquyazmojtex",
"abcdefghijklmnopqrstuvwxyz",
"evyeorezmslyn",
"msbprjtwwnb",
"laymsbkrprvyuaieitpwpurp",
"munifxzwieqbhaymkeol",
"lzasroxnpjqhmpr",
"evjeewybqpc",
"vzpdfwbbwxpxsdpfak",
"zyxwvutsrqponmlkjihgfedcba",
"vzpdfwbbwxpxsdpfak",
"jlgpiprth",
"czqriqfsqteavw",
]
def longest(s):
''' Return longest ordered substring of s
s consists of lower case letters only.
'''
found, temp = [], []
for prev, curr in zip(' ' + s, s + ' '):
if curr < prev:
if len(temp) > len(found):
found = temp[:]
temp = []
temp += [curr]
return ''.join(found)
def main():
msg = 'Longest substring in alphabetical order is:'
for s in data:
print s
print msg, longest(s)
print
if __name__ == '__main__':
main()
</code></pre>
<p><strong>输出</strong></p>
^{pr2}$