【发布时间】:2018-07-21 19:01:33
【问题描述】:
这是使用自下而上动态规划在给定字符串s 时查找最长回文子串的算法。因此该算法探索所有可能的长度j 子串并检查它是否是1 到n 中j 的有效回文。得到的时间和空间复杂度为O(n^2)。
def longestPalindrome(s):
n = len(s)
if n < 2:
return s
P = [[False for _ in range(n)] for _ in range(n)]
longest = s[0]
# j is the length of palindrome
for j in range(1, n+1):
for i in range(n-j+1):
# if length is less than 3, checking s[i] == s[i+j-1] is sufficient
P[i][i+j-1] = s[i] == s[i+j-1] and (j < 3 or P[i+1][i+j-2])
if P[i][i+j-1] and j > len(longest):
longest = s[i:i+j]
return longest
我正在尝试以自上而下的方式通过记忆实现相同的算法。
问题: 是否可以将此算法转换为自上而下的方法?
关于最长回文子串的问题有很多,但他们大多使用这种自下而上的方法。 https://stackoverflow.com/a/29959104/6217326 中的答案似乎最接近我的想法。但答案似乎是使用与这个不同的算法(而且速度要慢得多)。
【问题讨论】:
标签: python dynamic-programming palindrome memoization