#include <string>
#include <vector>
#include <algorithm>
 
class Solution {
public:
  int longestCommonSubsequence(std::string text1, std::string text2) {
    std::vector<std::vector<int>> dpTABLE(text1.size() + 1, std::vector<int>(text2.size() + 1, 0));
 
    for (int i = 1; i <= text1.size(); i++) {
      for (int j = 1; j <= text2.size(); j++) {
        if (text1[i - 1] == text2[j - 1]) {
          dpTABLE[i][j] = dpTABLE[i - 1][j - 1] + 1;
        } else {
          dpTABLE[i][j] = std::max(dpTABLE[i - 1][j], dpTABLE[i][j - 1]);
        }
      }
    }
  
    return dpTABLE[text1.size()][text2.size()];
  }
};