用dp[i][j] 表示text1的前i个字符和text2的前j个字符的最长公共子序列:
如果s[i]==s[j] 那么dp[i][j] = dp[i-1][j-1]+1
else dp[i][j] = max(dp[i-1][j], dp[i][j-1])
class Solution {
public:
int longestCommonSubsequence(string text1, string text2) {
int n = text1.size(), m = text2.size();
text1 = ""+text1;
text2 = ""+text2;
vector<vector<int>> dp(n+1,vector<int>(m+1));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(text1[i-1]==text2[j-1]) dp[i][j] = dp[i-1][j-1]+1;
else dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
}
}
return dp[n][m];
}
};