最长公共子序列 记录子序列~
#include<stdio.h>
#include<string.h>
char a[101],b[101],d[101];
int c[101][101];
int max(int x,int y)
{
if(x>y)
return x;
else
return y;
}
int main()
{
int lena,lenb,i,j,k,m;
while(scanf("%s%s",a+1,b+1)!=EOF)
{
m=0;
memset(d,0,sizeof(d));
lena=strlen(a+1);
lenb=strlen(b+1);
for(i=0;i<=lena;i++)
c[0][i]=0;
for(j=0;j<=lenb;j++)
c[j][0]=0;
k=0;
for(i=1;i<=lena;i++)
for(j=1;j<=lenb;j++){
if(a[i]==b[j])
{ c[i][j]=c[i-1][j-1]+1;
if(c[i][j]>m)
{ d[k]=a[i]; k++; }
}
else
c[i][j]=max(c[i-1][j],c[i][j-1]);
if(c[i][j]>m)
m=c[i][j];
}
printf("%d\n",c[lena][lenb]);
printf("%s\n",d);
}
return 0;}
#include<string.h>
char a[101],b[101],d[101];
int c[101][101];
int max(int x,int y)
{
if(x>y)
return x;
else
return y;
}
int main()
{
int lena,lenb,i,j,k,m;
while(scanf("%s%s",a+1,b+1)!=EOF)
{
m=0;
memset(d,0,sizeof(d));
lena=strlen(a+1);
lenb=strlen(b+1);
for(i=0;i<=lena;i++)
c[0][i]=0;
for(j=0;j<=lenb;j++)
c[j][0]=0;
k=0;
for(i=1;i<=lena;i++)
for(j=1;j<=lenb;j++){
if(a[i]==b[j])
{ c[i][j]=c[i-1][j-1]+1;
if(c[i][j]>m)
{ d[k]=a[i]; k++; }
}
else
c[i][j]=max(c[i-1][j],c[i][j-1]);
if(c[i][j]>m)
m=c[i][j];
}
printf("%d\n",c[lena][lenb]);
printf("%s\n",d);
}
return 0;}