问题:
题目来源:力扣(LeetCode)
难度:中等
分析:
经典的动态规划题。
一个小技巧,在DP表的第一行和第一列添加辅助行和辅助列,这样就免去了初始化时的麻烦。本题可以从辅助行和辅助列得到需要的base case,所以可以使用这个技巧。
解决方法:
1:二维DP
递推公式为
if text1[i - 1] == text2[j - 1]:dp[i][j] = dp[i - 1][j - 1] + 1,
if text1[i - 1] != text2[j - 1]:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]),
因为添加了辅助行和辅助列,所以text的索引记得减一。
class Solution:
def longestCommonSubsequence(self, text1: str, text2: str) -> int:
m, n = len(text1), len(text2)
dp = [[0]