class Solution {
public:
int mxlcs(string &t1, string &t2, int i, int j, vector<vector<int>> & dp)
{
if(i==t1.size()||j==t2.size()) return 0;
if(dp[i][j]!=-1) return dp[i][j];
int p=0;
if(t1[i]==t2[j])
{
p = 1+mxlcs(t1, t2, i+1, j+1, dp);
}
else p = max(mxlcs(t1, t2, i+1, j, dp), mxlcs(t1, t2, i, j+1, dp));
return dp[i][j]=p;
}
int longestCommonSubsequence(string text1, string text2) {
vector<vector<int>> dp(text1.size(), vector<int>(text2.size(), -1));
int ans=mxlcs(text1, text2, 0, 0, dp);
return ans;
}
};