#!/usr/bin/env python
# -*- coding: utf-8 -*
def lcs(arr1, arr2):
m = len(arr1)
n = len(arr2)
c = [[0 for k in range(n + 1)] for k in range(m + 1)]
b = [[-1 for k in range(n)] for k in range(m)]
for i in range(1, m + 1):
for j in range(1, n + 1):
if arr1[i - 1] == arr2[j - 1]:
c[i][j] = c[i - 1][j - 1] + 1
b[i - 1][j - 1] = '↖'
elif c[i - 1][j] >= c[i][j - 1]:
c[i][j] = c[i - 1][j]
b[i - 1][j - 1] = '↑'
else:
c[i][j] = c[i][j - 1]
b[i - 1][j - 1] = '←'
rlcs = []
get_lcs_arr(b, arr1, len(arr1) - 1, len(arr2) - 1, rlcs)
return c[m][n], rlcs
def get_lcs_arr(b, X, i, j, arr):
if i < 0 or j < 0:
return
if b[i][j] == '↖':
get_lcs_arr(b, X, i - 1, j - 1, arr)
arr.append(X[i])
elif b[i][j] == '↑':
get_lcs_arr(b, X, i - 1, j, arr)
else:
get_lcs_arr(b, X, i, j - 1, arr) 最长公共子序列(LCS)问题 python
最新推荐文章于 2024-10-13 22:59:48 发布
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
Python3.8
Conda
Python
Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本
194

被折叠的 条评论
为什么被折叠?



