#
# longest common subsequence
# @param s1 string字符串 the string
# @param s2 string字符串 the string
# @return string字符串
#
class Solution:
def LCS(self , s1 , s2 ):
# write code here
if not s1 or not s2:
return "-1"
m,n = len(s1),len(s2)
mark = [[0]*(n+1) for i in range(m+1)]
for i in range(m):
for j in range(n):
if s1[i]==s2[j]:
mark[i+1][j+1] = 1 + mark[i][j]
else:
mark[i+1][j+1] = max(mark[i+1][j],mark[i][j+1])
if not mark[m][n]:
return "-1"
return self.search(s1,s2,mark)
def search(self,s1,s2,mark):
m,n = len(s1),len(s2)
res = ""
while m>0 and n>0:
if mark[m][n] == mark[m-1][n-1]:
m -= 1
n -= 1
continue
if mark[m][n] == mark[m-1][n]:
m -= 1
continue
if mark[m][n] == mark[m][n-1]:
n -= 1
continue
if mark[m][n] == mark[m-1][n-1]+1:
res += s1[m-1]
m -=1
n -= 1
return res[::-1]