记录一下,因为看到很多python版本生成最长公共子序列都用的递归,这里只返回一个符合条件的最长公共子序列
class Solution:
def LCS(self,s1,s2):
c = len(s1)+1
r = len(s2)+1
dp = [[0]*c for i in range(r)]
for i in range(1,r):
for j in range(1,c):
if s1[j-1] == s2[i-1]:
dp[i][j] = dp[i-1][j-1]+1
else:
dp[i][j] = max(dp[i-1][j],dp[i][j-1])
maxl = dp[-1][-1]
print(maxl)
# 生成最长公共子序列,只返回满足条件的一个
res = []
i = r-1
j = c-1
while i > 0 and j > 0:
if s1[j-1] == s2[i-1]:
res.append(s1[j-1])
i -= 1
j -= 1
else:
if dp[i-1][j] > dp[i][j-1]:
i -= 1
else:
j -= 1
return ''.join(res[::-1])
if __name__ == '__main__':
p = Solution()
a = input('enter s1:')
while a != 'e':
b = input('enter s2:')
print(p.LCS(a,b))
a = input('enter s1:')