Заявление о проблемах: Приведенные две строки a и b равной длины, какая самая длинная строка (S), которая может быть построена так, что S является дочерним элементом как a, так и b. Строка x называется дочерним элементом строки y, если x можно сформировать, удалив 0 или более символов из y (т. Е. Отложив самую длинную общую подпоследовательность).Ошибка сегментации при поиске самой длинной общей подпоследовательности
Ввод: Две строки a и b с разделительной линией.
Ограничения: Все символы имеют верхний регистр и находятся между значениями ASCII 65-90. Максимальная длина строк а и б 5000.
Выходной формат: Длина строки С.
Моя проблема в том, что я получаю сегментацию FAULT для одного из тестов. КОГДА-ЛИ МЫ ПОЧЕМ?
Вот мой код в 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