dp[i][j]表示text1的前i位和text2的前j位对应的最长上升子序列
可以建立如下转移方程:
如果text1[i] == text[j], 那么dp[i][j] = dp[i-1][j-1] + 1
否则有两种转移方法,去掉text1的当前位置i或者text2的位置j,变成子问题, dp[i][j] = dp[i-1][j]
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int n = text1.size(), m = text2.size();
vector<vector<int>> dp(n+1,vector<int>(m+1));
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; 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]);
}
}
}
return dp[n][m];
}
};