116. Leetcode 1143. 最长公共子序列 (动态规划-子序列问题)
步骤一、确定状态:
确定dp数组及下标含义
dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长 公共子序列为dp[i][j]
步骤二、推断状态方程:
主要就是两大情况: text1[i - 1] 与 text2[j - 1]相同,text1[i - 1] 与 text2[j - 1]不相同
如果text1[i - 1] 与 text2[j - 1]相同,那么找到了一个公共元素,所以 dp[i][j] = dp[i - 1][j - 1] + 1;
如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列, 取最大的。
即:dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
步骤三、规定初始条件:
初始条件:
全局初始化都是0
步骤四、计算顺序:
从递推公式,可以看出,有三个方向可以推出dp[i][j], 如图:
从前向后,从上到下来遍历这个矩阵。
class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:if not text1 or not text2:return 0len1, len2 = len(text1) + 1, len(text2) + 1dp = [[0 for _ in range(len1)] for _ in range(len2)] # 初始化for i in range(1, len2):for j in range(1, len1):if text2[i-1] == text1[j-1]:dp[i][j] = dp[i-1][j-1] + 1else:dp[i][j] = max(dp[i][j-1], dp[i-1][j])return dp[-1][-1]
116. Leetcode 1143. 最长公共子序列 (动态规划-子序列问题)相关推荐
- LeetCode——1143. 最长公共子序列(Longest Common Subsequence)[中等]——分析及代码(Java)
LeetCode--1143. 最长公共子序列[Longest Common Subsequence][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 (1)思路 (2)代 ...
- LeetCode 1143. 最长公共子序列(动态规划)
1. 题目 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度. 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符 ...
- 【动态规划】LeetCode 1143最长公共子序列
题目链接:力扣 思路: 动态规划: dp[i][j]表示text1[0:i) 和 text2[0:j)的最长公共子序列的长度 上述表示中,text1[0:i)的长度为i的前缀,text2[0:j)表示 ...
- leetcode - 1143. 最长公共子序列
给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列. 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何 ...
- Leetcode 1143.最长公共子序列(求长度)
Time: 20190906 Type: Medium 题目描述 给定两个字符串text1和text2,返回它们的最长公共子序列. 子序列是通过原字符串删除一些字符(可以不删)生成的新的字符串,不改变 ...
- leetcode 1143. 最长公共子序列
难度:中等 频次:64 **题目:**给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度.如果不存在 公共子序列 ,返回 0 . 一个字符串的 子序列 是指这样一个 ...
- LeetCode 1143 最长公共子序列
给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度. 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删 ...
- leetcode 1143. 最长公共子序列(dp)
给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度.如果不存在 公共子序列 ,返回 0 . 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符 ...
- 115. Leetcode 718. 最长重复子数组 (动态规划-子序列问题)
步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示的是长度为i的A数组和长度为j的B数组公共的长度最长的子数组的长 度. 步骤二.推断状态方程: 考虑下dp[i][j], 因为这里的子数 ...
最新文章
- 如何更新你的机器学习模型?手把手带你设计一个可持续的预测模型!
- FIR滤波器设计(包括Verilog HDL设计以及MATLAB设计)
- c++读取utf8文件_【Python】File文件对象
- wifi协议栈_一文读懂米家部分智能硬件:米家Zigbee及WiFi模块拆解分析
- Java基础--通过反射获取私有的成员方法示例代码
- 小世界网络模型代码 c 语言,新的小世界网络模型实现文本特征的提取方法与流程...
- 安装问题的审计(产生漏洞,抓包)
- 计算机声音与视频教程,电脑怎么录屏幕视频带声音 电脑录屏幕视频带声音教程...
- mysql rds 定时执行_如何使用脚本自动备份阿里云rds数据库
- 数学建模 数理统计模型
- 如何用安装启动盘启动计算机,如何使用U盘启动进入PE安装系统,小编教你如何安装...
- 人工智能知识全面讲解:生成对抗网络的应用
- 【一级讲解】韩信点兵——中国剩余定理
- 常见数据同步工具的对比
- 点击小图查看大图的定位功能
- 从苏宁电器到卡巴斯基第34篇:我与卡巴斯基的邂逅(上)
- 基于JAVA校园快递联盟系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- 将mqm用户的环境变量写入配置文件
- 点击按钮变成灰色不可再次点击
- 阿里云服务器安装Docker