关于动态规划【力扣583.两个字符串的删除操作的思考】

1、目前动态规划的子序列系列的题目之间的区别与联系

【力扣300.最长递增子序列】一个数组,不连续

【力扣674.最长连续递增子序列】一个数组,连续

【力扣718.最长重复子数组】两个数组,连续

【力扣1143.最长公共子序列】两个数组,不连续

【力扣1035.不相交的线】(与1143本质一样)两个数组,不连续

【力扣53.最大子数组和】一个数组,连续

【力扣392.判断子序列】(与1143本质一样)两个数组,不连续

【力扣115.不同的子序列】(与1143本质一样)两个数组,不连续

本题【力扣583.两个字符串的删除操作】(与1143本质一样)两个数组,不连续

2、本题可以有两种方法

方法一:直接法

方法二:间接法(利用最长公共子序列)

3、方法一:直接法

关键区别:递推关系和dp数组初始化

代码续

【递推关系】的理解如下:

// 在写递推关系时要反复回看dp数组本身的含义

// dpij:以i-1为结尾的word1和以j-1为结尾的word2,所需删除的最少元素数

如果word1i-1 == word2j-1,就不需要删除元素,所以dpij = dpi-1j-1;

否则,就要删除元素,dpij的最小值可以来源于三种情况

// 删除一个word1的元素,所需删除最少元素数的代码表示为dpi-1j+1

// 删除一个word2的元素,所需删除最少元素数的代码表示为dpij-1+1

// 删除一个word1的元素和一个word2的元素(一共删除了两个元素),所需删除最少元素数的代码表示为dpi-1j-1+2

所以,如果word1i-1 不等于 word2j-1,dpij = min(min(dpi-1j+1,dpij-1+1),dpi-1j-1+2);

【dp数组初始化】的理解如下:

4、方法二:间接法(利用最长公共子序列)

本题可以转换题意:得到最长公共子序列,需要删除的元素数是多少

所以在代码上的区别是:返回值

本题【力扣583.两个字符串的删除操作】代码如下图所示

【力扣1143.最长公共子序列】代码如下图所示

相关推荐
一去不复返的通信er2 小时前
力扣-图论-岛屿数量
算法·leetcode·图论
程序 代码狂人5 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
HDU-Dade6 小时前
【校招笔试真题】简要介绍 Self-Attention 的前沿算法
人工智能·算法
Xin7706 小时前
LeetCode 79. 单词搜索(DFS 回溯法)
leetcode
小郎君6588 小时前
Vue keep-alive 切标签后滚动位置回顶?因为 onDeactivated 里读到的 scrollTop 是 0
算法
邵奈一8 小时前
GPT-6.1 Terra速度是Sol的3倍,价格减半
算法
RaaS1008 小时前
Node.js Brotli RCE 漏洞自查指南:fetch、undici、axios 都在影响面,三分钟确认你的版本
人工智能·深度学习·算法
shehuiyuelaiyuehao8 小时前
算法56,重排链表
数据结构·算法·链表
qq_452396239 小时前
第四篇:《索引原理与实战:B-tree、Hash、GIN、GiST、BRIN》
算法·哈希算法·gin