【动态规划】1143. 最长公共子序列
状态转移方程:
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int len1 = text1.size();
int len2 = text2.size();
int dp[len2][len1];
dp[0][0] = text1[0] == text2[0];
int result = dp[0][0];
for(int i=1;i<len2;++i){
dp[i][0] = max(int(text1[0] == text2[i]), dp[i-1][0]);
result = max(result, dp[i][0]);
}
for(int j=1;j<len1;++j){
dp[0][j] = max(int(text1[j] == text2[0]), dp[0][j-1]);
result = max(result, dp[0][j]);
}
for(int i=1;i<len2;++i)
for(int j=1;j<len1;++j){
if(text1[j] == text2[i])
dp[i][j] = dp[i-1][j-1] + 1;
else
dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
result = max(result, dp[i][j]);
// cout << result << endl;
}
return result;
}
};