1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution { private: vector<vector<int>> memo; public: int longestCommonSubsequence(string text1, string text2) { int len1 = text1.size(), len2 = text2.size(); memo = vector<vector<int>>(len1, vector<int>(len2, -1)); return dp(text1, len1 - 1, text2, len2 - 1); }
int dp(const string &text1, int end1, const string &text2, int end2) { if(end1 == -1 || end2 == -1) return 0; if(memo[end1][end2] != -1) return memo[end1][end2];
if(text1[end1] == text2[end2]) memo[end1][end2] = dp(text1, end1 - 1, text2, end2 - 1) + 1; else memo[end1][end2] = max(dp(text1, end1 - 1, text2, end2), dp(text1, end1, text2, end2 - 1)); return memo[end1][end2]; } };
|