Python Program to Find Longest Common Subsequence using Dynamic Programming with Bottom-Up Approach
def lcs(u, v):
"""Return c where c[i][j] contains length of LCS of u[i:] and v[j:]."""
c = [[-1]*(len(v) + 1) for _ in range(len(u) + 1)]
for i in range(len(u) + 1):
c[i][len(v)] = 0
for j in range(len(v)):
c[len(u)][j] = 0
for i in range(len(u) - 1, -1, -1):
for j in range(len(v) - 1, -1, -1):
if u[i] == v[j]:
c[i][j] = 1 + c[i + 1][j + 1]
else:
c[i][j] = max(c[i + 1][j], c[i][j + 1])
return c
def print_lcs(u, v, c):
"""Print one LCS of u and v using table c."""
i = j = 0
while not (i == len(u) or j == len(v)):
if u[i] == v[j]:
print(u[i], end='')
i += 1
j += 1
elif c[i][j + 1] > c[i + 1][j]:
j += 1
else:
i += 1
u = input('Enter first string: ')
v = input('Enter second string: ')
c = lcs(u, v)
print('Longest Common Subsequence: ', end='')
print_lcs(u, v, c)
Output
Enter first string: abcbdab
Enter second string: bdcaba
Longest Common Subsequence: bdab
