文章目录
- 题目:
- 自底向上dp:
- 自顶向下的dp:
题目:
自底向上dp:
class Solution {
public:int longestCommonSubsequence(string text1, string text2) {int m &#61; text1.size(),n&#61;text2.size();vector<vector<int>>dp(m&#43;1,vector<int>(n&#43;1,0));for(int i&#61;1;i<&#61;m;i&#43;&#43;){for(int j&#61;1;j<&#61;n;j&#43;&#43;){if(text1[i-1]&#61;&#61;text2[j-1]){dp[i][j] &#61; dp[i-1][j-1]&#43;1;}else{dp[i][j] &#61; max(dp[i][j-1],dp[i-1][j]);}}}return dp[m][n];}
};
自顶向下的dp&#xff1a;
class Solution {
public:
int memo[1000][1000];int longestCommonSubsequence(string text1, string text2) {init(memo);return dp(text1,text2,text1.size()-1,text2.size()-1);}
private:void init(int (*memo)[1000]){memset(memo,0,sizeof(memo));}int dp(string& text1,string& text2,int i,int j){if(i&#61;&#61;-1||j&#61;&#61;-1)return 0;if(memo[i][j]!&#61;0)return memo[i][j];
if(text1[i] &#61;&#61; text2[j])return memo[i][j]&#61;dp(text1,text2,i-1,j-1)&#43;1;
else{return memo[i][j]&#61;max(dp(text1,text2,i-1,j),dp(text1,text2,i,j-1));}}
};