🔗 https://leetcode.cn/problems/longest-common-subsequence
题目
- 返回两个字符串的最长公共子序列
- 子序列是不改变原有顺序的子元素
思路
- dp,递推公式是到当前 index i j,一下三种方式的最大值
- 到 index i j-1 的最长公共子序列
- 到 index i-1 j 的最长公共子序列
- 若 i 和 j 对应 index 元素相等, 到 index i-1 j-1 的最长公共子序列 + 1
代码
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int dp[1010][1010];
dp[0][0];
for (int i = 0; i < text1.size(); i++) {
for (int j = 0; j < text2.size(); j++) {
dp[i+1][j+1] = max(dp[i+1][j], dp[i][j+1]);
if (text1[i] == text2[j]) dp[i+1][j+1] = max(dp[i+1][j+1], dp[i][j] + 1);
}
}
return dp[text1.size()][text2.size()];
}
};