思路:
和上一题的区别是,子序列可以是不连续的。改一下递推公式,多从两个方向继承过去dp的值即可。
储备:
问题重点:
最后:
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int n=text1.size();
int m=text2.size();
vector<vector<int>> dp(n+1,vector<int>(m+1,0));
//a以i-1结尾,b以j-1为结尾的最长公共子序列的长度
int res=0;
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]);
res=max(res,dp[i][j]);
}
}
return res;
}
};

298

被折叠的 条评论
为什么被折叠?



