给定一个序列,如果其中有些元素(也可能没有)被省略,则我们可以得到该序列的一个子序列。给定一个序列X = <> ,另一个序列Z满足条件,存在严格递增索引序列I=<>,使得对于所有j = 1,2,…,k, ,则称Z= <>是的子序列。例如,Z = <a, b, f, c>是X = <a, b, c, f, b, c>的子序列。
给定两个序列X和Y,问题是求出X和Y的最大长度公共子序列的长度。
【输入形式】
两个给定字符串
【输出形式】
两个序列最大长度公共子序列的长度。
【样例输入】
abcfbc abfcab
【样例输出】
4
#include<iostream>
#define Max( a, b ) (a) > (b) ? (a) : (b)
using namespace std;
char s1[100], s2[100];
int dp[100][100];
int main()
{
int len1, len2;
memset(dp, 0, sizeof(dp));
cin>>s1+1>>s2+1;
len1 = strlen(s1 + 1);
len2 = strlen(s2 + 1);
for (int i = 1; i <= len1; ++i){
for (int j = 1; j <= len2; ++j){
if (s1[i] == s2[j])
{
dp[i][j] = dp[i - 1][j - 1] + 1;
}
else
{
dp[i][j] = Max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
cout<<dp[len1][len2]<<endl;
return 0;
}