-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlcs3.py
40 lines (39 loc) · 1.13 KB
/
lcs3.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import sys
import numpy
def lcs3(a, b, c):
#write your code here
m=len(a)
n=len(b)
l=len(c)
D=numpy.zeros((m+1,n+1,l+1),dtype=int)
for k in range(1,l+1):
for j in range(1,n+1):
for i in range(1,m+1):
insertion=D[i,j-1,k]
deletion=D[i-1,j,k]
match_=D[i,j,k-1]
mismatch=D[i-1,j-1,k-1]
insertion_=D[i,j-1,k-1]
deletion_=D[i-1,j,k-1]
match=D[i-1,j-1,k-1]+1
mismatch_=D[i-1,j-1,k]
if a[i-1]==b[j-1]==c[k-1]:
D[i,j,k]=max(insertion,deletion,insertion_,deletion_,match,match_,mismatch_)
else:
D[i,j,k]=max(insertion,deletion,insertion_,deletion_,mismatch,match_,mismatch_)
return D[m,n,l]
if __name__ == '__main__':
input = sys.stdin.read()
data = list(map(int, input.split()))
an = data[0]
data = data[1:]
a = data[:an]
data = data[an:]
bn = data[0]
data = data[1:]
b = data[:bn]
data = data[bn:]
cn = data[0]
data = data[1:]
c = data[:cn]
print(lcs3(a, b, c))