我已经写了LCS的部分。
我想知道如果我给 N(N>3) ,那意味着有多少组输入。
像这样:
输入:
4 ab abc abcd abcde
输出:
3
找到最长的那些 lcs(3 个序列一个部分)
ab abc abcd->ab->2
abc abcd abcde->abc->3
3>2
我的想法是每组数只用3个序列的方式,然后找到最大的一个。
但我不知道该怎么做或有更好的方法?
这是我的代码的一部分:
#define EQUAL(x,y,z) ((x)==(y)&&(y)==(z))
int main(){
int set;
int longest;
while (scanf("%d", &set) != EOF){
while (set){
scanf("%s", c1);
set--;
scanf("%s", c2);
set--;
scanf("%s", c3);
set--;
longest = LCS(strlen(c1), strlen(c2), strlen(c3));
}
}
return 0;
}
LCS:
int LCS(int c1_length, int c2_length, int c3_length)
{
memset(lcs, 0, N*N);
int i;
int j;
int k;
for (i = 1; i <= c1_length; i++)
for (j = 1; j <= c2_length; j++)
for (k = 1; k <= c3_length; k++)
{
if (EQUAL(c1[i], c2[j], c3[k]))
lcs[i][j][k] = lcs[i - 1][j - 1][k - 1] + 1;
else
lcs[i][j][k] = max(lcs[i - 1][j][k], lcs[i][j - 1][k], lcs[i][j][k - 1]);
}
return lcs[i - 1][j - 1][k - 1];
}
谢谢大家~我已经通过使用二维数组来存储序列解决了这个问题。