#c
#c
Вопрос:
Пожалуйста, помогите Мне нужен рекурсивный подход для печати самой длинной общей подстроки, а не длины, а строк между двумя строками в C. Это то, что я пробовал, и оно возвращает длину, но я хочу, чтобы была напечатана фактическая строка.
#include <stdio.h>
#include <stdlib.h>
#define max(x,y) (((x) >= (y)) ? (x) : (y))
#define min(x,y) (((x) <= (y)) ? (x) : (y))
int LCS(char *s1, char *s2, int m, int n, int lcsCount){
int lcsCount1 = 0;
lcsCount1 = lcsCount;
if(m <= 0 || n <= 0){
return lcsCount;
}if(s1[m - 1] == s2[n - 1]){
lcsCount1 = LCS(s1, s2, m-1, n-1, lcsCount 1);
}
int lcsCount2 = LCS(s1, s2, m, n-1, 0);
int lcsCount3 = LCS(s1, s2, m-1, n, 0);
return max(lcsCount1, max(lcsCount2, lcsCount3));
}
int main()
{
char X[500] = "Sandile";
char Y[500] = "andile";
int m = strlen(X);
int n = strlen(Y);
int result = LCS(X, Y, m, n, 0);
printf("%d", result);
return 0;
}
Ответ №1:
Может быть, вы могли бы попытаться сохранить string’index, где вы найдете первый такой же символ.
Затем, в конце программы, поскольку вы знаете, где встречается первый символ и длина подстроки, вам просто нужно ее распечатать.