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

最长公共子序列

题目描述

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

示例

在这里插入图片描述

思路

这是一道经典的动态规划题,我们首先来看状态表示

状态表示:dp[i][j]表示字符串text1的[1,i]区间和字符串text2的[1,j]区间的最长公共子序列长度(下标从1开始)

状态计算:

1、若text1[i] == text2[j] ,也就是说两个字符串的最后一位相等,那么问题就转化成了字符串text1的[1,j-1]区间和字符串text2的[1,j-1]区间的最长公共子序列长度再加上一,即dp[i][j] = dp[i - 1][j - 1] + 1。(下标从1开始)

2、若text1[i] != text2[j] ,也就是说两个字符串的最后一位不相等,那么问题就转化成了字符串text1的[1,j-1]区间和字符串text2的[1,j-1]区间的,为什么这么说呢?因为有以下三种情况,最后一种情况会被排除,因为对于case1和case2两种情况来说,最终结果都大于等于case3的结果text1[i…]>text1[i+1…]

case1:text1[i]不在子序列中,如:text1: abc text2: bc i=0

case2:text2[j]不在子序列中,如:text1: bc text2: abc j=0

case3:text1[i]和text2[j]不在序列中,如:text1: abc text2: dbc i=j=0

状态转移方程:

case1:text1[i] == text2[j] ====> dp[i][j] = 1 + dp[i - 1][j - 1]

case2:text1[i] != text2[j] ====> dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1])

代码如下:

	public int longestCommonSubsequence(String text1, String text2) {int m = text1.length(), n = text2.length();int[][] dp = new int[m + 1][n + 1];for(int i = 1;i < dp.length;i++){for(int j = 1;j < dp[0].length;j++){if(text1.charAt(i - 1) == text2.charAt(j - 1)){dp[i][j] = 1 + dp[i - 1][j - 1];}else{dp[i][j] = Math.max(dp[i][j - 1], dp[i - 1][j]);}}}return dp[m][n];}
http://www.lryc.cn/news/211917.html

相关文章:

  • 万字解析设计模式之工厂方法模式与简单工厂模式
  • One-to-N N-to-One: Two Advanced Backdoor Attacks Against Deep Learning Models
  • 洛谷 B2009 计算 (a+b)/c 的值 C++代码
  • Arduino驱动ME007-ULA防水测距模组(超声波传感器)
  • Linux 权限管理(二)
  • 线性代数 第一章 行列式
  • 查询Oracle所有用户相关信息
  • 电路的电线的拼接
  • 前端学习之webpack
  • 2023NOIP A层联测20-旅行
  • STM32 中断NVIC详解,配置及示例
  • 10.30英语期中稿
  • 二维数组如何更快地遍历
  • 【网络安全】Seeker内网穿透追踪定位
  • Spring Boot 3系列之一(初始化项目)
  • 用python判断一个数是否为素数
  • FreeRTOS_信号量之二值信号量
  • 使用Gateway解决跨域问题时配置文件不生效的情况之一
  • 【火影手游】新版押镖护送高分攻略
  • 【JVM】类的声明周期(加载、连接、初始化)
  • 开源3D激光(视觉)SLAM算法汇总(持续更新)
  • 绕WAF手法总结
  • Linux mv命令:移动文件或改名
  • 在 Elasticsearch 中丰富你的 Elasticsearch 文档
  • 探营云栖大会:蚂蚁集团展出数字人全栈技术,三大AI“机器人”引关注
  • hdlbits系列verilog解答(8位宽移位寄存器)-24
  • LeetCode 275. H 指数 II
  • Android 优质的UI组件汇总
  • halcon roberts、 prewitt_amp、 sobel_amp、 edges_image、 laplace_of_gauss 对比
  • Vue2 跨域问题报错AxiosError net::ERR_FAILED、 Network Error、ERR_NETWORK