int lcs(string s1,string s2,int m,int n, vector<vector<int>>&dp){
if(m==0 || n==0)
return 0;
if(dp[m][n]>0)
return dp[m][n];
if(s1[m-1]==s2[n-1])
dp[m][n] = 1+lcs(s1,s2,m-1,n-1,dp);
else
dp[m][n] = max(lcs(s1,s2,m-1,n,dp),lcs(s1,s2,m,n-1,dp));
return dp[m][n];
}
DP Solution:
for(int i=0;i<=s1.size();++i){
for(int j=0;j<=s2.size();++j){
if(i==0||j==0)
continue;
if(s1[i-1]==s2[j-1])
dp[i][j]=1+dp[i-1][j-1];
else
dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
}
}