只能用动态规划算法计算最长回文,如下还有优化的空间嘛?
不要扯马拉车,只能用动态规划哈。
class Solution:
@staticmethod
def longestPalindrome(s):
l = len(s)
result = {}
def calcPalindrome(x, y):
# print('x, y:', x, y)
# print('result:', result)
key = '{0}-{1}'.format(x, y)
if key in result:
return result[key]
elif x == y:
result[key] = 1
elif x > y:
result[key] = 0
elif s[x] == s[y]:
outer = y - x + 1
inner = calcPalindrome(x + 1, y - 1)
# print('outer inner:', key, outer, inner)
if outer - inner == 2:
result[key] = outer
else:
result[key] = max(calcPalindrome(x + 1, y), calcPalindrome(x, y - 1))
else:
result[key] = max(calcPalindrome(x + 1, y), calcPalindrome(x, y - 1))
return result[key]
calcPalindrome(0, l - 1)
r = ''
for key, value in result.items():
arr = key.split('-')
start = int(arr[0])
end = int(arr[1])
if end - start + 1 == value and len(r) < value:
r = s[start:end + 1]
return r
s = "jglknendplocymmvwtoxverwrwerw234234werebkekzfdhykknufqdkntnqvgfbahsljkobhbxkvyictzkqjqydczuxjkgecdyhixdttxfqmgksrkyvopwprsgoszftuhawflzjyuyrujrxluhzjvbflxgcovilthvuihzttzithnsqbdxtafxrfrblulsakrahulwthhbjcslceewxfxtavljpimaqqlcbrdgtgjryjytgxljxtravwdlnrrauxplempnbfeusgtqzjtzshwieutxdytlrrqvyemlyzolhbkzhyfyttevqnfvmpqjngcnazmaagwihxrhmcibyfkccyrqwnzlzqeuenhwlzhbxqxerfifzncimwqsfatudjihtumrtjtggzleovihifxufvwqeimbxvzlxwcsknksogsbwwdlwulnetdysvsfkonggeedtshxqkgbhoscjgpiel"
print(Solution.longestPalindrome(s))
网友评论