一、Leetcode 1143.最长公共子序列
这题和718. 最长重复子数组很像,区别是子数组和子序列的定义差别导致递推公式的变化。子序列包含了子数组的情况。
dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]
if (text1[i - 1] == text2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
二、Leetcode 1035.不相交的线
我一眼就看出来,是和1143最长公共子序列一样的了。
三、Leetcode 53. 最大子序和 动态规划
遇到 i - 1 项还是得多上心。
dp[i]:包括下标i之前的最大连续子序列和为dp[i]。
dp[i] = max(dp[i - 1] + nums[i], nums[i]);