我正在为一个程序工作,该程序解决了在给定的两个字符串中找到最长公共子序列的最大长度的问题,我观察到它没有显示结果矩阵中我的 2 个字符串的第一个字符。
示例 - 两个字符串是
- BDCABA
- ABCBDAB
结果 -
算法没有错误,但我的 C 代码中可能存在一些故障。
代码 -
#include<stdio.h>
#include<string.h>
#define size 20
char A[size],B[size];
int i,j,A_len,B_len;
int score[size][size];
void main()
{
printf("\tEnter first string\n\t");
scanf("%s",A);
printf("\tEnter second string\n\t");
scanf("%s",B);
printf("\n");
A_len = strlen(A);
B_len = strlen(B);
A[0] = ' ';
printf("\t ");
for(i=1;i<=B_len;i++)
printf("%5c",toupper(B[i]));
printf("\n\n");
for(i=0;i<=A_len;i++)
{
for(j=0;j<=B_len;j++)
{
if(i==0 || j==0)
score[i][j]=0;
else if(A[i] == B[j] )
score[i][j] = score[i-1][j-1] + 1;
else
{
if(score[i][j-1]>score[i-1][j])
score[i][j] = score[i][j-1];
else
score[i][j] = score[i-1][j];
}
}
}
for(i=0;i<=A_len;i++)
{
printf("\t%c",toupper(A[i]));
for(j=0;j<=B_len;j++)
printf("%5d",score[i][j]);
printf("\n\n");
}
if(score[A_len][B_len] != 0)
{
printf("Longest common subsequence is of %d length :\t",score[A_len][B_len]);
}
else
printf("longest common subsequence not found");
}
代码为所有字符串返回正确的结果,但它没有在结果中显示输入字符串名称,因为它们提供了,它跳过了两个字符串的第一个字符,不幸的是我没有得到这种行为的理由,请帮我解决这个问题。
谢谢