题目描述


 给定两个序列X=


输入


输入数据有多组,每组有两行 ,每行为一个长度不超过500的字符串(输入全是大写英文字母(A,Z)),表示序列X和Y。


输出


每组输出一行,表示所求得的最长公共子序列的长度,若不存在公共子序列,则输出0。


示例输入


ABCBDAB BDCABA


示例输出


4


提示


#include<stdio.h>
#include <string.h>
int main()
{
	int i, j, f[600][600], k1, k2;
	char s1[600], s2[600];
	while(gets(s1))
    {
        gets(s2);
        k1=strlen(s1);
        k2=strlen(s2);
        for(i=0;i<=k1;i++)
            f[i][0]=0;
        for(i=0;i<=k2;i++)
            f[0][i]=0;
        for(i=1;i<=k1;i++)
        {
            for(j=1;j<=k2;j++)
            {
                if(s1[i-1]==s2[j-1])
                    f[i][j]=f[i-1][j-1]+1;
                else if(f[i][j-1]>=f[i-1][j])
                    f[i][j]=f[i][j-1];
                else
                    f[i][j]=f[i-1][j];
            }
        }
        printf("%d\n",f[k1][k2]);
    }
	return 0;
}