From c96b59814f4dac17e55e78f30f2a1711d3246a54 Mon Sep 17 00:00:00 2001 From: Shantanu Date: Wed, 16 Oct 2019 20:04:19 +0530 Subject: [PATCH] LCS py implementation --- lcs.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 lcs.py diff --git a/lcs.py b/lcs.py new file mode 100644 index 0000000..f9ad15b --- /dev/null +++ b/lcs.py @@ -0,0 +1,53 @@ +# Dynamic programming implementation of LCS problem + +# Returns length of LCS for X[0..m-1], Y[0..n-1] +def lcs(X, Y, m, n): + L = [[0 for x in range(n+1)] for x in range(m+1)] + + # 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 in range(m+1): + for j in range(n+1): + if i == 0 or j == 0: + L[i][j] = 0 + elif 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]) + + # Following code is used to print LCS + index = L[m][n] + + # Create a character array to store the lcs string + lcs = [""] * (index+1) + lcs[index] = "" + + # Start from the right-most-bottom-most corner and + # one by one store characters in lcs[] + i = m + j = n + while i > 0 and j > 0: + + # If current character in X[] and Y are same, then + # current character is part of LCS + if X[i-1] == Y[j-1]: + lcs[index-1] = X[i-1] + i-=1 + j-=1 + index-=1 + + # If not same, then find the larger of two and + # go in the direction of larger value + elif L[i-1][j] > L[i][j-1]: + i-=1 + else: + j-=1 + + print("LCS of " + X + " and " + Y + " is " + "".join(lcs) ) + +# Driver program +X = "acf" +Y = "abcf" +m = len(X) +n = len(Y) +lcs(X, Y, m, n) \ No newline at end of file