#include <stdio.h>
#include <string.h>
int a[1005][1005];
int s[1005][1005];
void LCSLength(char *str1,char *str2,int len1,int len2)
{
int i,j;
for(i=1;i<=len1;i++)
{
for(j=1;j<=len2;j++)
{
if(str1[i-1]==str2[j-1])
{
a[i][j]=a[i-1][j-1]+1;
s[i][j]=1;
}
else if(a[i-1][j]>=a[i][j-1])
{
a[i][j]=a[i-1][j];
s[i][j]=2;
}
else
{
a[i][j]=a[i][j-1];
s[i][j]=3;
}
}
}
printf("最长公共子序列长度为:%d\n",a[len1][len2]);
}
void LCS(char *str,int i,int j)
{
if(i==0 || j==0)
return ;
if(s[i][j]==1)
{
LCS(str,i-1,j-1);
printf("%c",str[i-1]);
}
else if(s[i][j]==2)
return LCS(str,i-1,j);
else
return LCS(str,i,j-1);
}
int main()
{
char str1[1005],str2[1005];
while(~scanf("%s %s",str1,str2))
{
LCSLength(str1,str2,strlen(str1),strlen(str2));
LCS(str1,strlen(str1),strlen(str2));
putchar('\n');
}
return 0;
}
最长公共子序列
最新推荐文章于 2022-04-01 20:36:57 发布