当前位置: 首页 > article >正文

最长公共子序列(LCS)

嘿嘿这是一个很难的东西欧。(小狗勾能有什么坏心眼呢)

---------------------------------------------------废话不多说,进入正文------------------------------------------------

最长公共子序列是什么

如果不知道子序列是什么的,建议先看看这个(其实是讲最长不下降子序列的,但里面也有关于子序列的内容),最长公共子序列,就是两个字符串之间(数字也不是不行)最长的那个一样的子串,换句话讲,就是那个是两个字符串的子序列(跟数字的子序列一个道理)中那些一样的子序列中最长的(有点啰嗦了。。。)

最长公共子序列怎么求

同最长不下降子序列,最长公共子序列也是用DP实现的,在最长不下降子序列中,dp[i]表示前i个数字中最长的不下降子序列,在最长公共子序列中,dp[i][j]表示a的前i个和b的前j个(a,b为那两个要求的字符串)最长的公共子序列,很显然,当第i个和第j个相同的时候他们的最长公共子序列就加上一了,而如果不相同,那就老老实实的从上一个状态照搬(就是i-1或j-1的状态),那么转移方程就出来了。

如果a[i]=b[j]那么dp[i][j]=dp[i-1][j-1]+1;

否则dp[i][j]=max(dp[i-1][j],dp[i][j-1]);

接下来就是C++代码编写的状态转移方程

for(int i=1;i<=n;i++){//n为a串长度 
	for(int j=1;j<=m;j++){//j为b串长度 
		if(a[i]==b[j]){
			dp[i][j]=dp[i-1][j-1]+1;
		}
		else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); 
	}
}

结束!!!!!!!!!!!!!!!!!!!!!!!!!


http://www.kler.cn/a/349912.html

相关文章:

  • 数据结构基础之《(15)—排序算法小结》
  • 讯飞绘镜(ai生成视频)技术浅析(二):大模型
  • 安装最小化的CentOS7后,执行yum命令报错Could not resolve host mirrorlist.centos.org; 未知的错误
  • Pyecharts图表交互功能提升
  • Cpp::静态 动态的类型转换全解析(36)
  • Mono里运行C#脚本35—加载C#语言基类的过程
  • C#读取和写入txt文档(在unity中示例)
  • Android 关于引用unityLibrary依赖库无法加载so库问题或脚本报错问题
  • GPT4o,GPTo1-preview, 拼
  • 基于模型预测控制(MPC)储能控制策略-多目标哈里斯鹰(MOHHO)算法的储能容量配置方法
  • 一站式学习Wireshark
  • 低学历可以从事人工智能行业吗?
  • 初学51单片机之I2C总线与E2PROM以及UART简单实例应用
  • pytorch resnet源码分析
  • 【MYSQL】数据库基本操作----DQL(Data Query Language)---基本查询
  • Go基础知识:切片
  • 字符串算法之Rabin-Karp 算法(字符串匹配)详细解读
  • 打家劫舍系列 | Leetcode 198 | 213 | 337 | 动态规划 | 滚动数组
  • 51单片机红外通信——直流电机
  • leetcode桶排序
  • (10) GTest c++单元测试(mac版)
  • Python cachetools常用缓存算法汇总
  • Python的dataframe 排序
  • MySQL 【日期】函数大全(四)
  • ollama + fastgpt+m3e本地部署
  • AI视频监控卫士:免费开源,一键安装轻松实现智能监控