mirror of
https://github.com/heqin-zhu/algorithm.git
synced 2024-03-22 13:30:46 +08:00
51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
''' mbinary
|
|
#########################################################################
|
|
# File : lcs.py
|
|
# Author: mbinary
|
|
# Mail: zhuheqin1@gmail.com
|
|
# Blog: https://mbinary.xyz
|
|
# Github: https://github.com/mbinary
|
|
# Created Time: 2018-08-25 12:00
|
|
# Description:
|
|
#########################################################################
|
|
'''
|
|
|
|
def lcs(a,b):
|
|
'''time: O(mn); space: O(mn)'''
|
|
m,n= len(a),len(b)
|
|
board = [[[] for i in range(n+1)] for i in range(m+1)]
|
|
for i in range(m):
|
|
for j in range(n):
|
|
if a[i]==b[j]:
|
|
board[i+1][j+1] =board[i][j]+[a[i]]
|
|
elif len(board[i][j+1]) < len(board[i+1][j]):
|
|
board[i+1][j+1] = board[i+1][j]
|
|
else :
|
|
board[i+1][j+1] = board[i][1+j]
|
|
return board[m][n]
|
|
|
|
def lcs2(a,b):
|
|
'''time: O(mn); space: O(m)'''
|
|
m,n= len(a),len(b)
|
|
board = [[] for i in range(n+1)]
|
|
for i in range(m):
|
|
upperLevel = board[0].copy()
|
|
for j in range(n):
|
|
tmp = board[j+1].copy()
|
|
if a[i]==b[j]:
|
|
board[j+1] = upperLevel+[a[i]]
|
|
elif len(board[j+1]) < len(board[j]):
|
|
board[j+1] = board[j].copy() # copy is needed
|
|
upperLevel = tmp
|
|
return board[n]
|
|
|
|
if __name__ =='__main__':
|
|
a = 'ABCBDAB'
|
|
b = 'BDCABA'
|
|
print('s1:',a)
|
|
print('s2:',b)
|
|
while 1:
|
|
print('lcs:',lcs2(a,b))
|
|
a = input('s1: ')
|
|
b = input('s2: ')
|