leetcode
Memoization methods
class Solution {
public:
int dp[1000 + 1][1000 + 1];
int maxLen(string& s1, string& s2, int n, int m)
{
if (n == 0 || m == 0)
return 0;
if (dp[n][m] != -1)
return dp[n][m];
if (s1[n - 1] == s2[m - 1])
return dp[n][m] = 1 + maxLen(s1, s2, n - 1, m - 1);
else
return dp[n][m] = max(maxLen(s1, s2, n - 0, m - 1), maxLen(s1, s2, n - 1, m - 0));
}
int longestCommonSubsequence(string s1, string s2)
{
memset(dp, -1, sizeof(dp));
return maxLen(s1, s2, s1.length(), s2.length());
}
};
Tabulation methods
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int m=text1.size(),n=text2.size();
int dp[m+1][n+1];
// set default value
for(int i=0;i<m+1;i++){
dp[i][0]=0;
}
for(int i=0;i<n+1;i++){
dp[0][i]=0;
}
for(int i=1;i<m+1;i++){
for(int j=1;j<n+1;j++){
if(text1[i-1]==text2[j-1]){
dp[i][j]= 1+dp[i-1][j-1]; // char string1 equal string2 , count + 1
}else{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]); //now is before max count.
}
}
}
return dp[m][n];
}
};
//Tabulation methods
//rule condtion
//run all 2d array
//1. find word , move text1 , move text2
//2. not find , now set copy max before
//3. return last array is answer
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up