""" 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 continious. Example:"abc", "abg" are subsequences of "abcdefgh". """ def LCS(x,y): b=[[] for j in range(len(x)+1)] c=[[] for i in range(len(x))] for i in range(len(x)+1): b[i].append(0) for i in range(1,len(y)+1): b[0].append(0) for i in range(len(x)): for j in range(len(y)): if x[i]==y[j]: b[i+1].append(b[i][j]+1) c[i].append('/') elif b[i][j+1]>=b[i+1][j]: b[i+1].append(b[i][j+1]) c[i].append('|') else : b[i+1].append(b[i+1][j]) c[i].append('-') return b,c def print_lcs(x,c,n,m): n,m=n-1,m-1 ans=[] while n>=0 and m>=0: if c[n][m]=='/': ans.append(x[n]) n,m=n-1,m-1 elif c[n][m]=='|': n=n-1 else: m=m-1 ans=ans[::-1] return ans if __name__=='__main__': x=['a','b','c','b','d','a','b'] y=['b','d','c','a','b','a'] b,c=LCS(x,y) print('Given \nX : ',x) print('Y : ',y) print('LCS : ',print_lcs(x,c,len(x),len(y)))