【发布时间】:2020-12-19 05:14:27
【问题描述】:
这是我对以下 leetcode 问题的解决方案:https://leetcode.com/problems/longest-palindromic-substring/
找到最长的回文子串(回文是前后相同的字符串)。
我的解决方案以某种方式通过了他们所有的测试用例,但超出了时间限制。我已经实现了一个基于 DP 的解决方案,但不知道什么可能需要额外的时间。
class Solution:
def longestPalindrome(self, s: str) -> str:
table = [[True] for i in range(len(s))]
best = (0,1)
for i in range(len(s) - 1):
for j in range(0, len(s) - i -1):
size = i + 1
shift = j
diag = table[j + 1][i-1]
eq = s[shift] == s[shift + size]
table[j].append(diag and eq)
if diag and eq: best = (shift, shift + size + 1)
return s[best[0]:best[1]]
【问题讨论】:
-
您没有遗漏任何细微的细节 - 您的算法很慢,原因很简单,因为这些循环需要二次时间。你需要一个更好的算法。
-
我不知道这可以比二次方更快。我得再考虑一下。
标签: python dynamic-programming palindrome