<p>下面是一个递归的解决方案。此函数是纯递归的,没有for循环,更确切地说,根本没有循环:</p>
<pre><code>def find_max(s):
_ret = []
def string_iter(concat, compare):
def appender():
if len(concat) >= len(_ret[-1]):
if len(concat) > len(_ret[-1]):
while _ret:
_ret.pop()
_ret.append(concat)
if len(compare) == 0:
if len(_ret) != 0:
appender()
else:
_ret.append(concat)
return
if concat[-1] < compare[0]:
concat += compare[0]
string_iter(concat, compare[1:])
else:
if len(_ret) != 0:
appender()
else:
_ret.append(concat)
string_iter(compare[0], compare[1:])
string_iter(s[0], s[1:])
return _ret
print find_max('abc') # -->['abc']
print find_max('afz') # -->['afz']
print find_max('cba') # -->['c','b','a']
print find_max('zfa') # -->['z','f','a']
print find_max('abczabc') # --> ['abcz']
print find_max('abcabcpaidfbkjabdsfilabdfkabldfjadf') # --> ['abcp', 'abdfk']
</code></pre>