583. Delete Operation for Two Strings
求 Longest Common String
,跟 common 有关的很多都是DP题,这题虽然是二维DP,状态转换方程还挺简单的。
bottom-up
和top-down
都能写,但top-down
的结构在 Python 里实现起来有点tricky,而且也慢。bottom-up
可以直接拿数组记录,简单一些。
class Solution:
def minDistance(self, word1: str, word2: str) -> int:
m, n = len(word1), len(word2)
dp = collections.defaultdict(lambda :collections.defaultdict(int))
return len(word1) + len(word2) - 2 * self.LCS(word1, word2, m, n, dp)
# longest common string
def LCS(self, a, b, m, n, dp):
if not m or not n:
return 0
if dp[m][n]:
return dp[m][n]
if a[m-1] == b[n-1]:
dp[m][n] = 1 + self.LCS(a, b, m-1, n-1, dp)
else:
dp[m][n] = max([self.LCS(a, b, m-1, n, dp), self.LCS(a, b, m, n-1, dp)])
return dp[m][n]
Last updated
Was this helpful?