最长公共子序列
动态规划 !!!!!!!!!!!!!!
给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。
您在真实的面试中是否遇到过这个题? Yes
说明
最长公共子序列的定义:
最长公共子序列问题是在一组序列(通常2个)中找到最长公共子序列(注意:不同于子串,LCS不需要是连续的子串)。该问题是典型的计算机科学问题,是文件差异比较程序的基础,在生物信息学中也有所应用。
样例
给出”ABCD” 和 “EDCA”,这个LCS是 “A” (或 D或C),返回1
给出 “ABCD” 和 “EACB”,这个LCS是”AC”返回 2
class Solution {
public:
/**
* @param A, B: Two strings.
* @return: The length of longest common subsequence of A and B.
*/
int longestCommonSubsequence(string A, string B) {
// write your code here
int m=A.size(),n=B.size();
if(m==0||n==0)
return 0;
vector<vector<int>> dp(m+1,vector<int>(n+1,0));
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;
}
};