#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXSIZE 100
int c[MAXSIZE][MAXSIZE];
void lcs(char *ptr1,char *ptr2)
{
int i,j;
for(i=0;i<=MAXSIZE;i++)
{
c[0][i]=0;
c[i][0]=0;
}
for(i=1;i<=strlen(ptr1);i++)
for(j=1;j<=strlen(ptr2);j++)
{
if(*(ptr1+i-1)==*(ptr2+j-1))
c[i][j]=c[i-1][j-1]+1;
else if(c[i-1][j]>=c[i][j-1])
c[i][j]=c[i-1][j];
else
c[i][j]=c[i][j-1];
}
}
void lcs_print(char *ptr1,char *ptr2,int i,int j)
{
if(i==0||j==0)
return;
if(ptr1[i-1]==ptr2[j-1])
{
lcs_print(ptr1,ptr2,i-1,j-1);
printf("%c",ptr1[i-1]);
}
else if(c[i-1][j]>=c[i][j-1])
lcs_print(ptr1,ptr2,i-1,j);
else
lcs_print(ptr1,ptr2,i,j-1);
}
int main()
{
char str1[MAXSIZE],str2[MAXSIZE];
int i,j;
memset(str1,MAXSIZE,'\0');
memset(str2,MAXSIZE,'\0');
printf("please input two string:\n");
scanf("%s%s",str1,str2);
lcs(str1,str2);
for(i=0;i<=strlen(str1);i++)
{
putchar('\n');
for(j=0;j<=strlen(str2);j++)
printf("%d",c[i][j]);
}
putchar('\n');
i=strlen(str1);
j=strlen(str2);
printf("the length of lcs is:%d\n",c[i][j]);
printf("the lcs is:\n");
lcs_print(str1,str2,i,j);
putchar('\n');
return 0;
}