如何定义递归式函数findmax,其工作方式如下:
findmax('abc')-->['abc']
findmax('afz')-->['afz']
findmax('cba')-->['c','b','a']
findmax('zfa')-->['z','f','a']
findmax('abczabc')-->['abcz']
findmax('abcabc')-->['abc','abc']
该函数仅接收一个或多个 az 字符。并返回字符按升序排列的所有最长子字符串。
我为什么要问这个问题?因为我的直觉告诉我必须有一个优雅的回溯式解决方案。但很遗憾,我无法解决。
请看看我写的糟糕的解决方案:
def findmax(s):
res=[]
string=s[0]
end=len(s)
for i in range(1,end):
if ord(s[i-1])<=ord(s[i]):
string+=s[i]
if i==end-1:
res.append(string)
else:
res.append(string)
string=s[i]
if i==end-1:
res.append(string)
fin=[]
maxNum=0
for r in res:
size=len(r)
if size>maxNum:
maxNum=size
fin=[]
fin.append(r)
elif size==maxNum:
fin.append(r)
return fin