python算法问题,求两个字符串的最长公共子序列长度

对于问题,两个字符串的最长公共子序列长度进行求解,首先要知道子序列的定义,如果说给定一个字符串,对这个字符串中的原有字符进行不改变字符相对位置的删除,这里的相对位置就是处于前还是后的相对关系,进行删除字符的操作之后,所形成的新的字符串就是原来的字符串的子序列。

这里要求解的问题,就是给定两个字符串S1和S2,对这两个字符串进行子序列的比对,得到一个共同的子序列,求这个子序列的最长字符长度。如下例子:

添加图片注释,不超过 140 字(可选)

对于以上问题,如果说不使用动态规划等思路的求解,暴力求解所产生的计算量非常大,造成时间复杂度很高的后果,所以选择使用动态规划思路求解,并且使用二维动态规划,这里主要借助于一个二维数组来进行模拟。

使用一个L(i,j),这里代表的是S1字符串的前m位中的前i个字符和S2字符串的前n位的前j个字符的最长公共子序列的长度,对于该问题的状态转移方程分为3种情况,分别是,当m和n都是0的时候,则有L(m,n)=0,第二种情况是当m和n都大于0的时候,并且对应的S1的m位字符和S2的n位字符相同时,L(m,n)=L(m-1,n-1)+1,第三种情况是当m和n都大于0的时候,并且对应的S1的m位字符和S2的n位字符不相同时,L(m,n)=max(L(m,n-1),L(m-1,n))。下图为"ABCD"和"BDCA"字符串的判定最长公共子序列的长度的过程:

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

python代码实现如下:

    def longestequence(self, s1, s2):len1=len(s1)len2=len(s2)array=[[0]*(len2+1) for _ in range(len1+1)]for i in range(1,len1+1):for j in range(1,len2+1):if s1[i-1]==s2[j-1]:array[i][j]=array[i-1][j-1]+1else:array[i][j]=max(array[i][j-1],array[i-1][j])return array[len1][len2]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-7Lead Compensator超前补偿器(调节根轨迹)

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-7Lead Compensator超前补偿器(调节根轨迹) 1. Plot Rootlocus 绘制根轨迹2. System Performance 系统表现3. 改善/加快收敛速度4. 超前补偿器 Lead Compe…

Vue3 结合typescript 组合式函数

在App.vue文件中 实现鼠标点击文件,显示坐标值 第一种方法 第二种方法:组合式函数 结果: 官网推荐组合函数:https://vueuse.org

MySQL之四大引擎、账号管理以及建库

目录 一.数据库存储引擎 ① MEMORY ②MyISAM ③InnoDB ④ARCHIVE 二.数据库管理 2.1.三大数据库 2.1.1.information_schema 2.1.2.mysql 2.1.3.performance_schema 2.2.相关操作 2.3.权限相关的表 三. 数据库的表管理 3.1.三大范式 3.2.基本数据类型 四.账号管理…

Arbitrum之后,估值18亿美元Scroll又火了

文章目录 Scroll的核心竞争力EVM等效全面的去中心化如何领取Scroll空投?结语参考 Scroll是用于以太坊的原生zkEVM Layer 2解决方案,帮助解决以太坊的拥堵问题并进行扩容。 Scroll创立于2021年,致力于创建一个 EVM(以太坊虚拟机&a…

论文阅读: Semantics-guided Triplet Loss

ICCV 2021 Abstract 一个度量学习方法,通过浏览语义引导的局部集合去优化内在深度表示。一个新颖的特征融合模块能有效利用跨模态特异质特征。 Senantics-guided Triplet Loss 基本假设: 在场景语义分割图像中,目标内部相邻像素拥有同样…

C++面向对象高级编程(侯捷)笔记1

侯捷C面向对象高级编程 本文是学习笔记,仅供个人学习使用,如有侵权,请联系删除。 如果你对函数参数何时该传引用(&)、何时该传值,对函数返回值是否传引用(&),对…

声明式管理方法

声明式管理方法(yaml)文件: 1,适合对资源的修改操作 2,声明式管理依赖于yaml文件,所有的内容都在yamI文件当中 3,编辑好的yaml文件,还是要依靠陈述式命令发布到k8s集群当中 发布的…

数据损毁!250 亿美金的 Pinterest,在数据库选型上的翻车经历

原文链接 Pinterest 是一个以图片为主的社交网络,用户可以将图片保存或 "钉 / pin" 在自己的图板上。Pinterest 在 2019 年上市,目前市值 250 亿美金。本文内容主要根据 2012 年 Scaling Pinterest 的分享。 2012 年 1 月,Pinteres…

鸿蒙工程目录结构

工程结构 . ├── build ├── build-profile.json5 ├── hvigorfile.ts ├── libs │ └── armeabi-v7a ├── oh-package.json5 ├── oh_modules │ └── types │ └── libentry.so -> ../../src/main/cpp/types/libentry └── src├── ma…

qcom ./development/tools/idegen/idegen.sh 卡住不动

前言 在Android 开发中,有时候我们需要将android 源码导入android studio,就要用到idegen 工具,qcom 高通部分平台发现执行/development/tools/idegen/idegen.sh 不动 分析 通过添加log发现是由于文件遍历进入了死循环; 可以在…

HTML----JavaScript操作对象BOM对象

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 本章要求 了解BOM模型掌握BOM模型实际应用 一.BOM模型概述 BOM(浏览器对象模型)是JavaScript中的一个重要概念,它提供了一组用于控制浏览器窗口和页面内容的…

力扣热题100道-矩阵篇

矩阵 73.矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法**。** 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]]示例…

胡润研究院发布《2023胡润中国最具历史文化底蕴品牌榜》

胡润研究院发布《2023胡润中国最具历史文化底蕴品牌榜》,前十名分别是片仔癀、同仁堂、贵州茅台、五粮液、中国银行、中华、黄山、农业银行、建设银行、汾酒。 榜单调研范围涵盖中国内地具有60年以上历史的为消费者提供产品或服务的品牌,综合考察品牌历史…

C# 语法进阶 委托

1.委托 委托是一个引用类型,其实他是一个类,保存方法的指针 (指针:保存一个变量的地址)他指向一个方法,当我们调用委托的时候这个方法就立即被执行 关键字:delegate 运行结果: 思…

TikTok舞台背后:短视频如何打破艺术界界限?

TikTok,这个以短视频为媒介的平台,正成为全球年轻一代表达创意的重要舞台。然而,其影响不仅仅停留在娱乐领域,更在艺术界引起了巨大的关注。本文将深入探讨TikTok是如何在短视频的形式下打破传统艺术界的界限,为创作者…

欢迎提交pr共同改进项目, pr的含义?

"提交PR"在软件开发和编程领域是一个常用术语,特别是在使用版本控制系统如Git时。这里的“PR”指的是“Pull Request”,它是一种通知项目维护人员您已经完成了一些代码改动并希望将这些改动合并到主项目中的方式。简单来说,当您对一…

Eureka相关面试题及答案(2024)

1、什么是Eureka? Eureka是一个由Netflix开发的服务发现(Service Discovery)工具,它是Spring Cloud生态系统中的一个关键组件。服务发现是微服务架构中的一个重要概念,它允许服务实例在启动时注册自己,以便…

【第7期】前端如何实现菜单记忆和用户操作的状态记忆

本期简介 背景一:我们平时使用到管理功能时,会涉及到打开了某个一级菜单,访问了某个二级菜单,打开了相应的页面,那么我们希望一级菜单当前时展开的,二级菜单当前时有选中颜色与其他未访问的菜单进行区分的&…

【银行测试】超细支付功能测试+测试点总结分析(详全)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、支付功能怎么测…

华为鸿蒙应用--文件管理工具(鸿蒙工具)-ArkTs

0、代码 import fs from ohos.file.fs; import { Logger } from ./Logger; import { Constants } from ../constants/Constants; import { toast } from ./ToastUtils;export class FileUtils {/*** 获取目录下所有文件* param filesDir* returns*/static getFiles(filesDir: …