From 9b948fee0079c877a85ba5838ae089f1f86df677 Mon Sep 17 00:00:00 2001 From: Sanjay Majhi <47259000+sanjaymajhi@users.noreply.github.com> Date: Sat, 3 Oct 2020 11:53:48 +0530 Subject: [PATCH] Create LongestCommonSubsequence.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LCS Problem Statement: Given two sequences, find the length of longest subsequence present in both of them. A subsequence is a sequence that appears in the same relative order, but not necessarily contiguous. For example, “abc”, “abg”, “bdf”, “aeg”, ‘”acefg”, .. etc are subsequences of “abcdefg”. --- .../C++/LongestCommonSubsequence.cpp | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Algorithms/Dynamic Programming/C++/LongestCommonSubsequence.cpp diff --git a/Algorithms/Dynamic Programming/C++/LongestCommonSubsequence.cpp b/Algorithms/Dynamic Programming/C++/LongestCommonSubsequence.cpp new file mode 100644 index 0000000..5fa85e6 --- /dev/null +++ b/Algorithms/Dynamic Programming/C++/LongestCommonSubsequence.cpp @@ -0,0 +1,57 @@ +/* Dynamic Programming C++ implementation of LCS problem */ +#include +using namespace std; + +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 Code +int main() +{ + char X[] = "AGGTAB"; + char Y[] = "GXTXAYB"; + + int m = strlen(X); + int n = strlen(Y); + + cout << "Length of LCS is " + << lcs( X, Y, m, n ); + + return 0; +} +