关于动态规划【力扣72.编辑距离的思考】

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

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

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

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

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

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

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

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

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

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

本题【力扣72.编辑距离】(与1143本质一样)两个数组,不连续

(本题在上一题583的基础上多了其他操作)

2、关键区别

本题是前面的题目的综合题,涉及了数组的增、删、改

代码体现在递推公式上

// 分析一下本题的递推公式

// 如果word1i-1 == word2j-1,说明不用操作(回看dp数组的定义,需要计算的是最少操作数)

// 所以如果word1i-1 == word2j-1,那么dpij = dpi-1j-1;(dpij不做任何操作)

// 如果word1i-1 不等于 word2j-1,那么也就是说,当前两个指针所指元素不一样的时候。删除第一个数组的当前元素也就是第一个指针回退,或者删除第二个数组的当前元素也就是第二个指针回退(因为增加元素的操作就是删除元素的逆操作,所以只增加较少元素数组的最少操作数和只删除较多元素数组的最少操作数是一样的,所以不考虑增加元素的情况)或者两个元素替换一下(因为替换第一个数组的元素使得第一个数组与第二个数组相同的操作,和替换第二个数组的元素使得第二个数组与第一个数组相同的操作是一样的,所以只操作一次就好)

// 如果word1i-1 不等于 word2j-1,dpij的值可能来源于上面三种情况,取最小值就行。也就是说,dpij = min(min(dpi-1j+1,dpij-1+1),dpi-1j-1+1); // 删除了第一个数组的当前元素,其实算是操作了一次,所以dpi-1j要加1

比如:例1(两个数组的元素是假设的)

比如:例2(两个数组的元素是假设的)

以上三种情况都是在word1i-1 不等于 word2j-1的时候,dpij的可能来源,最小的操作数就是当前dpij的实际来源

【代码如下图所示】

相关推荐
冻柠檬飞冰走茶1 小时前
PTA基础编程题目集 7-27 冒泡法排序(C语言实现)
c语言·开发语言·数据结构·算法
大鱼>2 小时前
因子挖掘+回测+RL交易:量化金融完整系统
人工智能·深度学习·算法·金融
c238564 小时前
《枚举算法 “翻译官”:用 enum class 给 “游游的礼盒” 算分》
c语言·c++·算法
吃好睡好便好4 小时前
MATLAB中图像的对数变换
图像处理·学习·算法·计算机视觉·matlab
noipp4 小时前
推荐题目:洛谷 P5843 [SCOI2012] Blinker 的噩梦
c语言·数据结构·c++·算法·游戏·洛谷·luogu
极客BIM工作室4 小时前
OpenCascade 倒角(Chamfer)算法完整逻辑解析
算法
冻柠檬飞冰走茶4 小时前
PTA基础编程题目集 7-20 打印九九口诀表(C语言实现)
c语言·开发语言·数据结构·算法
鱼子星_4 小时前
《算 · 法》题目解析篇(1):最近公共祖先问题,线段树,最长回文子序列
c++·算法·动态规划·递归
雾喔4 小时前
算法练习5
算法·代理模式
问商十三载5 小时前
RAG 检索召回越多越好?2026 信噪比模型深度解析
人工智能·算法·机器学习