最长公共子序列动态规划
程序员文章站
2022-07-12 08:55:26
...
#include<stdio.h>
#include<string.h>
char s1[1000];
char s2[1000];
int maxlen[1000][1000];
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int main()
{
while(scanf("%s%s",s1,s2))
{
int length1=strlen(s1);
int length2=strlen(s2);
int i,j;
for(i=0;i<=length1;i++)//边界条件
maxlen[i][0]=0;
for(j=0;j<=length2;j++)
maxlen[0][j]=0;
for(i=1;i<=length1;i++)
{
for(j=1;j<=length2;j++)
if( s1[i-1] == s2[j-1] )//如果s1的左边第i个字符和s2左边第j个字符相等,s1最左边是s1[0]
maxlen[i][j]=maxlen[i-1][j-1]+1;//s1的左边i个字符和s2左边j个字符所形成的最长公共子序列的长度
//等于s1左边i-1个字符和s2左边j-1个字符所形成的最长公共子序列+1
else
maxlen[i][j]=max(maxlen[i][j-1],maxlen[i-1][j]);//否则就等于左边或上边长度较大的那个
}
printf("%d",maxlen[length1][length2]);
}
return 0;
}
上一篇: 最长公共子序列(动态规划)
下一篇: 最长公共子序列(动态规划)