最长公共子序列
描述
给出两个字符串,求出这样的一个最长的公共子序列的长度:
子序列中的每个字符都能在两个原串中找到,而且每个字符的先后顺序和原串中的先后顺序一致。
输入
输入若干行数据,每行有两个字符串,用空格隔开。
输出
逐行输出每行数据的最大公共子序列的长度。
样例
abcfbc abfcab
programming contest
abcd mnp
4
2
0
难度
中,动态规划填表
解法
代码
#include "bits/stdc++.h"
using namespace std;
int dp[10010][10010];
string s1,s2;
int a,b;
int main()
{
while(cin>>s1>>s2)
{
a=s1.size();
b=s2.size();
for(int i=0;i<=a;i++)
{
for(int j=0;j<=b;j++)
{
if(i==0||j==0)
{
dp[i][j]=0;
continue;
}
if(s1[i-1]==s2[j-1])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
cout << dp[a][b] << endl;
}
return 0;
}