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