版权声明:2018/4/10重启blog;转载请注明出处 https://blog.csdn.net/zhaiqiming2010/article/details/84146470
问题描述
给出两个字符串A,B求两个的字符串的最长公共子序列,求得的子序列可以不连续,只要保证子序列的元素相对的相对顺序和AB都保持一致就可以。
解决方案
DP[i][j]代表 A串从起点到i位置的字串 和 B串从起点到j位置的字串 的LCS
DP递推式是显然的
当A[i] == B[j] 时 :DP[i][j] = DP[i-1][j-1] + 1
当A[i] != B[j] 时 : DP[i][j] = MAX(DP[i-1][j] , DP[i][j-1])
int LCS()
{
for(int i = 0 ; i < n ; i++)
{
for(int j = 0 ; j < m ; j+++)
{
if(A[i] == B[j])
{
dp[i+1][j+1] = dp[i][j]+1;
}
else
{
dp[i+1][j+1] = max(dp[i][j+1] , dp[i+1][j]);
}
}
}
return dp[n][m];
}