关于动态规划【力扣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.最长公共子序列】代码如下图所示

相关推荐
啊真真真4 小时前
ArgoCD:我的GitOps探索之旅与未来展望
java·算法·argocd
海绵天哥5 小时前
LeetCode Hot 100 | 链表(下)· 分组翻转与设计(C++ 题解)
c++·leetcode·链表
就改了11 小时前
Java8 日期处理(详细版)
java·python·算法
2601_9583529011 小时前
接上USB,焊上麦,通话瞬间安静——WX-0813如何用AI降噪+100dB消回音,把嘈杂通话变成“金子“般清晰
人工智能·算法·语音识别·硬件开发·语音模块·降噪消回音
小蒋学算法13 小时前
算法-M个非重叠子数组最大和II-WQS二分学习
数据结构·学习·算法
我要见SA姐114 小时前
AI提示词遇见精密算法:TimeGuessr如何用数学魔法打造文化游戏新体验
人工智能·算法·游戏
Jerry14 小时前
LeetCode 56. 合并区间
算法
实验如有神祝女士18 小时前
不同参数规模大模型在医学翻译场景的适配差异
论文阅读·人工智能·深度学习·学习·算法·语言模型·论文笔记
windliang18 小时前
Claude Code 源码分析(三):一次模型回答如何流进 Agent
前端·算法·ai编程
Kyrie_kk20 小时前
Java--BigInteger 超大整数计算
java·算法