给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。
样例
给出"ABCD" 和 "EDCA",这个LCS是 "A" (或 D或C),返回1
给出 "ABCD" 和 "EACB",这个LCS是"AC"返回 2
注意:
序列可以不连续。
class Solution {
public:
int longestCommonSubsequence(string A, string B) {
if(A.empty()||B.empty())
return 0;
int dp[A.length()+1][B.length()+1];
memset(dp,0,sizeof(dp));
int n=A.length();
int m=B.length();
int maxp=INT_MIN;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
if(A[i-1]==B[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
maxp=max(dp[i][j],maxp);
}
return maxp;
}
};