問題說明:給定兩個長度相等的字符串a和b,可以構造的最長的字符串(S)是什麼,以便S是a和b的子元素。一個字符串x被認爲是一個字符串y的子元素,如果x可以通過從y中刪除0個或更多個字符(ie..finding最長公共子序列)來形成。找到最長公共子序列的分段錯誤
輸入:兩個字符串a和b用換行符分開。
限制條件:所有字符都是大寫字母,位於ASCII值65-90之間。弦A和B的最大長度是5000。
輸出格式:串S.
我的問題的長度是,我抵達段故障爲一體的測試用例。 SOMEOE PLZ告訴我爲什麼?
這裏在C我的代碼:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int max(int a, int b)
{
return (a>b)?a:b;
}
int lcs(char *X, char *Y, int x, int y)
{
int L[x+1][y+1];
int i,j;
for(i=0 ; i<=x ; i++)
{
for(j=0 ; j<=y ; j++)
{
if(i==0 || j==0)
L[i][j] = 0;
else if(X[i-1] == Y[j-1])
{
L[i][j] = 1 + L[i-1][j-1];
}
else
L[i][j] = max(L[i-1][j],L[i][j-1]);
}
}
return L[x][y];
}
int main() {
char a[5000],b[5000];
scanf("%s",a);
scanf("%s",b);
int lenA, lenB;
lenA = strlen(a);
lenB = strlen(b);
printf("%d",lcs(a,b,lenA,lenB));
return 0;
}
當您使用調試器逐行執行程序時,您發現了什麼? –
也不要喊叫,並完成英語句子和單詞。 –
'int L [x + 1] [y + 1];'這不是標準的C++。鑑於此,您需要告訴我們測試案例失敗的原因。 – PaulMcKenzie