最长公共子序列(LCS)问题 python

Algorithm LCS最长公共子序列 算法: 递归法:对于序列A[0,n]]和B[0,m],LCS(A,B)无非三种情况 若A或B为空,则取作空序列,作为递归基 如果末字符相等,即A[n]=B[m]=‘X’,则取LCS(A[0,n),B[0,m))+‘X’,如果前者可以求解,则问题的规模被缩小 如果末字符不相等,即A[n]!=B[m],比如A[n]=a,B[m]=b,则a和b至多有一个会出现在最后的解里(对解有贡献)。因为... 阅读详情
#!/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)  



Python高效计算两个字符串的最长公共子序列 通过使用动态规划,我们成功实现了一个高效的函数,能够计算两个字符串的最长公共子序列。这个设计不仅高效,而且易于理解和实现。在实际应用中,LCS算法可以用于文本比较、DNA序列分析、版本控制等场景。希望这篇博文对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言讨论。🚀这篇博文详细介绍了如何实现一个函数,计算两个字符串的最长公共子序列,涵盖了设计思路、代码实现、测试代码和性能分析。希望对你在面试中有所帮助!如果还有其他问题,随时告诉我。 阅读详情

相关推荐

数据库系统概论课后习题答案(第五版 王珊、萨师煊)

第1章 绪论 1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表

早知晓的博客 11万+

最长公共子序列(线性DP)

给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数N和M。 第二行包含一个长度为N的字符串,表示字符串A。 第三行包含一个长度为M的字符串,表示字符串B。 字符串均由小写字母构成。 输出格式 输出一个整数,表示最大长度。 数据范围 1≤N,M≤10001≤N,M≤1000 输入样例: 4 5 acbd abedc 输出样例: 3 #include <iostream> #include <algorithm&gt

qq_43738331的博客 387

避坑指南:PyTorch ConvLSTM参数配置的那些坑(hidden_dim/kernel_size/num_layers详解)

本文深度解析PyTorch ConvLSTM中hidden_dim、kernel_size和num_layers三大核心参数的配置技巧,提供实战指南和性能优化建议。通过实验数据揭示参数组合的内在规律,帮助开发者避免常见配置陷阱,提升时空序列建模效果。特别针对视频预测、气象预报等应用场景,给出黄金参数组合方案和调试技巧。

vv45678的博客 702

7-2 最长公共子序列 (10 分)(思路加详解)

一:题目 给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。 输入格式: 第一行包含两个整数N和M。1≤N,M≤1000 第二行包含一个长度为N的字符串,表示字符串A。 第三行包含一个长度为M的字符串,表示字符串B。 字符串均由小写字母构成。 输出格式: 输出一个整数,表示最大长度。 输入样例: 4 5 acbd abcbd 输出样例: 4 二:思路 区分:最长公共子序列和最长公共子串 举例:str1:abcd; str2:abecd 最长公共子序列: ab

qq_48508278的博客 2641

软件工程导论考试通关秘籍:太原理工大学历年真题解析(附答案)

本文为太原理工大学《软件工程导论》考试提供高效备考指南,通过解析近六年真题,揭示高频考点如软件生命周期、UML建模和结构化设计等核心模块的命题规律。文章提供真题拆解、实战策略和避坑指南,帮助考生掌握图形转换题和简答题的应答技巧,助力考试通关。

weixin_29233333的博客 227

新手必看:LiteRadio 2c SE遥控器从开箱到飞行的完整指南(附常见问题解答)

本文为新手提供LiteRadio 2c SE遥控器的完整使用指南,涵盖从开箱到首飞的20个关键步骤。详细介绍了遥控器的功能设置、与无人机的对频技巧以及首飞注意事项,帮助用户快速掌握飞行控制,避免常见错误。特别适合无人机初学者阅读。

weixin_29209801的博客 380

897 最长公共子序列(模板题)

1. 问题描述: 给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数 N 和 M。 第二行包含一个长度为 N 的字符串,表示字符串 A。 第三行包含一个长度为 M 的字符串,表示字符串 B。 字符串均由小写字母构成。 输出格式 输出一个整数,表示最大长度。 数据范围 1 ≤ N,M ≤ 1000 输入样例: 4 5 acbd abedc 输出样例: 3 来源:https://www.acwing.co.

二哈 510

数学建模小白必看:层次分析法(AHP)从入门到实战(附Python代码)

本文详细介绍了层次分析法(AHP)在数学建模竞赛中的应用,从构建判断矩阵到一致性检验,再到权重计算和实战案例。通过Python代码实现,帮助小白快速掌握AHP的核心技巧,解决评价类难题,提升建模效率。

web39explorer的博客 918

[数据结构与算法] 最长公共子序列 LCS问题 python

最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题。这与查找最长公共子串的问题不同的地方是:子序列不需要在原序列中占用连续的位置 。最长公共子序列问题是一个经典的计算机科学问题,也是数据比较程序,比如Diff工具,和生物信息学应用的基础。它也被广泛地应用在版本控制,比如Git用来调和文件之间的改变。 使用递归解决LCS问题 https://www.b...

q742971636的博客 448

GD32F470 DSP库移植避坑指南:从CMSIS版本冲突到AC6工程配置

本文详细解析了在GD32F470平台上移植CMSIS-DSP库的完整流程与关键避坑点。针对CMSIS版本冲突、AC6编译器下的浮点ABI配置、DSP库源文件添加等核心难题,提供了经过验证的解决方案,帮助开发者高效完成移植,确保硬件FPU正常工作并优化性能。

data3的博客 530

基于ROS2的无人机野生动物巡查系统设计

自主巡检系统是嵌入式人工智能与机器人技术融合的关键应用方向,其核心在于多源感知融合、实时路径规划与端侧智能识别的协同实现。原理上依赖SLAM定位构建环境地图,结合栅格化建模与混合路径算法(如蚁群+BFS)达成全覆盖遍历;技术价值体现在资源受限平台下的确定性响应与时空对齐能力,支撑高鲁棒性野外作业。典型应用场景包括生态监测、禁飞区巡检及小尺度智能安防。本文围绕ROS2 Humble中间件架构、Livox激光雷达与MaixCAM视觉协同、YOLO11n INT8模型端侧部署等关键技术展开,突出嵌入式AI与实时控

weixin_30598047的博客 649

使用python解决最长公共子序列(LCS)问题

本代码旨在解决最长公共子序列(LCS)问题,并将动态规划求解过程中的状态转移表格进行可视化展示。通过matplotlib库绘制表格,同时使用箭头表示状态转移方向,以及高亮显示匹配字符的单元格,帮助用户更直观地理解 LCS 问题的求解过程。本代码通过动态规划方法解决了最长公共子序列问题,并使用matplotlib库将动态规划表进行可视化展示。通过箭头和高亮单元格,用户可以更清晰地理解 LCS 问题的求解过程和状态转移关系。完整代码else:# 设置坐标轴标签和标题# 绘制单元格数值和转移箭头。

weixin_69327572的博客 812

【Visual Assist X助手安装问题】Visual Assist X无法安装(双击安装包没反应) | Visual Assist X安装后在Visual Studio中找不到(亲测有效)

本文分享了Visual Assisant X助手的安装与使用问题的详细解决办法,因为网上搜集的信息比较少,所以有一定的参考价值。考虑到很多开发新手会遇到上述问题,可能对Windows系统不熟悉,所以相关操作步骤讲解的很详细!

dvlinker的技术专栏 6万+

python实现求解最长公共子序列LCS问题

在实现论文《Automatically Generating Models for Botnet Detection》论文的算法中,用到了一个The longest commom subsequence algorithm算法,就是最长公共子序列LCS问题。求两个字符串的最长公共子串,这个子串不要求在两个字符串中连续,但是要有序。 个人感觉写的比较好的博客:http://blog.chinaun

vicki1102的博客 2940

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最小公共子序列 python_算法导论,动态规划 —— 最长公共子序列问题(LCS,python示例)...

# coding=utf-8# 计算LCS长度算法# 算法导论课本 动态规划 LCS 代码示例# LCS 根据伪码 使用 python实现def lcsLength(x,y):m = len(x) + 1n = len(y) + 1# 存放箭头方向b = [[0 for i in range(n)] for j in range(m)]# 存放数值c = [[0 for i...

weixin_39630999的博客 463

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

算法课堂实验报告(四)——python动态规划(最长公共子序列LCS问题)

python实现动态规划 一、开发环境 开发工具:jupyter notebook 并使用vscode,cmd命令行工具协助编程测试算法,并使用codeblocks辅助编写C++程序 编程语言:python3.6 二、实验内容 1.最长公共子序列问题。分别求x={ABCBDAB}, y={BDCABA} 问题背景: 首先引用一下百度百科的话 最长公共子序列(LCS)是一个在一个序列...

Campsisgrandiflora的博客 4907

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

算法导论,动态规划 —— 最长公共子序列问题(LCS,python示例)

# coding=utf-8 # 计算LCS长度算法 # 算法导论课本 动态规划 LCS 代码示例 # LCS 根据伪码 使用 python实现 def lcsLength(x,y): m = len(x) + 1 n = len(y) + 1 ...

chikuitu2122的博客 567

最长公共子序列LCS及其回溯问题-Python题解

最长公共子序列LCS及其回溯问题-Python题解

Rrong的博客 1180

动态规划法(十)最长公共子序列(LCS)问题

问题介绍   给定一个序列\(X=<x_1,x_2,....,x_m>\),另一个序列\(Z=<z_1,z_2,....,z_k>\)满足如下条件时称为X的子序列:存在一个严格递增的X的下标序列\(<i_1,i_2,...,i_k>\),对所有的\(j=1,2,...,k\)满足\(x_{i_j}=z_j.\)   给定两个序列\(X\)和\(Y\),...

aix26249的博客 225

算法导论,动态规划 —— 最长公共子序列问题(LCS)优化python示例

# coding=utf-8 # 计算LCS长度算法 算法 改进 只用 一行 和 一个 额外空间 求得长度 空间复杂度由O(m*n)降低为O(n) # 空间优化。观察状态转移方程,计算的F[i,j]时只和F[i-1,j-1],F[i,j-1],F[i-1,j]三个元素直接相关。...

chikuitu2122的博客 551

lcs问题java_动态规划法(十)最长公共子序列(LCS)问题

问题介绍给定一个序列$X=$,另一个序列$Z=$满足如下条件时称为X的子序列:存在一个严格递增的X的下标序列${i_1,i_2,...,i_k}$,对所有的$j=1,2,...,k$满足$x_{i_j}=z_j.$给定两个序列$X$和$Y$,如果$Z$同时是$X$和$Y$的子序列,则称$Z$是$X$和$Y$的公共子序列。最长公共子序列(LCS)问题指的是:求解两个序列$X$和$Y$的长度最长的公共...

weixin_30016961的博客 666

c语言最长公共子序列_清晰思路代码讲解:用Python求两个字符串最长公共子序列(建议收藏)...

文章内容主要介绍了Python求两个字符串最长公共子序列代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下!!!一、问题描述给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB。则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA...

weixin_39911998的博客 506

求解两个字符串的最长公共子序列

一,问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB 则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA 二,算法求解 这是一个动态规划的题目。对于可用动态规划求解的问题,一般有两个特征:①最优子结构;②重叠子问题 ①最优子结构 设 X=(x1,x2,...

weixin_30549175的博客 327

《算法导论》CLRS算法C++实现(十二)P208 最长公共子序列LCS

给定两个序列X和Y,如果Z既是X的一个子序列又是Y的一个子序列,则称序列Z是X和Y的一个公共子序列。   在最长公共子序列问题(LCS)中,给定了两个序列X=1,x2,…,xm>和Y=1,y2,…,yn>,希望找出X和Y的最大长度的公共子序列。最直观且容易想到的方法是枚举出X的所有子序列,然后逐一检查看其是否为Y的子序列,并随时记录所发现的最长子序列。这种方法的时间复杂度是指数级的,对于较长的

juvenfan的专栏 561

最长公共子序列

子序列问题考虑动态规划。 对于两个序列,要看它们之间的关系,肯定用二维状态转移矩阵是没问题的。dp[ i ][ j ]代表str1的前 i 个元素和str2的前 j 个元素的LCS长度。 之后就是找到状态转移矩阵,dp[ i ][ j ]怎么由前面的dp推出来呢? 假如现在已经到了两个字符串的尾部,尾部两个字符是相同的。dp[ i ][ j ]...

七月听雪的博客 239
上一篇: 求字数组最大和问题 python
下一篇: 判断字符串是否为回文 python实现
「已注销」
博客等级 码龄15年 5粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值