From ce12a7127c19bd73f79406a251ed4c7ca693c954 Mon Sep 17 00:00:00 2001 From: suma_111 Date: Sat, 26 Oct 2019 04:05:55 +0530 Subject: [PATCH] added LCS problem --- Lcs.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Lcs.cpp diff --git a/Lcs.cpp b/Lcs.cpp new file mode 100644 index 0000000..5efab85 --- /dev/null +++ b/Lcs.cpp @@ -0,0 +1,51 @@ +* Dynamic Programming C implementation of LCS problem */ +#include + +int max(int a, int b); + +/* Returns length of LCS for X[0..m-1], Y[0..n-1] */ +int lcs( char *X, char *Y, int m, int n ) +{ + int L[m+1][n+1]; + int i, j; + + /* Following steps build L[m+1][n+1] in bottom up fashion. Note + that L[i][j] contains length of LCS of X[0..i-1] and Y[0..j-1] */ + for (i=0; i<=m; i++) + { + for (j=0; j<=n; j++) + { + if (i == 0 || j == 0) + L[i][j] = 0; + + else if (X[i-1] == Y[j-1]) + L[i][j] = L[i-1][j-1] + 1; + + else + L[i][j] = max(L[i-1][j], L[i][j-1]); + } + } + + /* L[m][n] contains length of LCS for X[0..n-1] and Y[0..m-1] */ + return L[m][n]; +} + +/* Utility function to get max of 2 integers */ +int max(int a, int b) +{ + return (a > b)? a : b; +} + +/* Driver program to test above function */ +int main() +{ + + string X,Y; + cin>>X>>Y; + int m = strlen(X); + int n = strlen(Y); + + printf("Length of LCS is %d", lcs( X, Y, m, n ) ); + + return 0; +} \ No newline at end of file