Description
Input
Output
Sample Input
abcfbc abfcab programming contest abcd mnp
Sample Output
4 2 0
解题思路:
题目的大意是输入两个字符串以空格作为输入结束符,注意这个题目是以文件结束符作为结束,我们就可以很明确的看出这是一个求最大公共子序列的题目。所以我们可以利用求公共最大子序列的模版解出这一道题目。
程序代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int const N=1000;
int save[N][N];
char str1[N],str2[N];
int max(int x,int y)
{
return x>y?x:y;
}
int maxlen(char *str1,char *str2)
{
int n1=strlen(str1),n2=strlen(str2),i,j;
for(i=0;i<=max(n1,n2);i++)
save[i][0]=save[0][i]=0;
for(i=1;i<=n1;i++)
for(j=1;j<=n2;j++) //以下从str1[0]和str2[0]开始比较
save[i][j]=(str1[i-1]==str2[j-1] ? save[i-1][j-1]+1 : max(save[i-1][j],save[i][j-1]));
return save[n1][n2];
}
int main()
{
while(scanf("%s%s",str1,str2)!=EOF)
{
memset(save,0,sizeof(save));
cout<<maxlen(str1,str2)<<endl;
}
return 0;
}
原文:http://www.cnblogs.com/xinxiangqing/p/4730947.html