#最长公共子序列
#动态规划
def LCS(s1, s2):
n,m = len(s1), len(s2)
dp = [[0 for _ in range(m+1)] for _ in range(n+1)] #记录到当前位置最长公共子序列的长度
for i in range(m):
for j in range(n):
if s1[x] == s2[y]:
dp[i+1][j+1] = dp[i][j+1] + 1
else:
dp[i+1][j+1] = max(dp[i][j+1], dp[i+1][j])
# 最长公共子序列就是dp[n][m]
#返回最长公共子序列
arr = []
x, y = n, m
while dp[x][y] > 0:
if dp[x][y] == dp[x-1][y]:
x -= 1
elif dp[x][y] == dp[x][y-1]:
y -= 1
else:
x -= 1
y -= 1
arr.append(s1[x])
return ''.join(arr[::-1])
最长公共子序列 动态规划 python
最新推荐文章于 2023-04-22 20:13:33 发布