Каков рекурсивный подход для печати самой длинной общей подстроки в C

#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, где вы найдете первый такой же символ.

Затем, в конце программы, поскольку вы знаете, где встречается первый символ и длина подстроки, вам просто нужно ее распечатать.