LeetCode 1143. 真实面试题,字符串最长公共子序列dp写法
原题链接
简单
作者:
大明湖的鱼
,
2021-04-03 10:51:39
,
所有人可见
,
阅读 381
思路
dp[i][j] 表示 text1[i-1] 和text2[j-1] 的最长公共子序列,dp[0][0] = 0 ,初始化为0;如果text1[i-1] == text2[j-1],那么dp[i][j] = dp[i-1][j-1]+1 ; 如果不相等,那么dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
仔细体会
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int len1 = text1.length();
int len2 = text2.length();
vector<vector<int>> dp(len1+1,vector<int>(len2+1,0));
for(int i = 1 ; i< len1+1;i++){
for(int j = 1;j<len2+1;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[len1][len2];
}
};