关于动态规划【力扣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的实际来源

【代码如下图所示】

相关推荐
CQU_JIAKE7 分钟前
10.1[A]2267,磐久UMX【上下文128K,KVCache部分]
算法
朝朝辞暮i12 分钟前
C++ 第 14 课:引用 &
开发语言·c++·算法
Joe_Wang532 分钟前
【从0到1学习JVM · 21】既不浪费空间又没有碎片,标记整理算法到底慢在哪
jvm·学习·算法·垃圾回收·标记整理算法
让学习成为一种生活方式38 分钟前
PlantCellChat--单细胞与空间转录组数据预测植物细胞间通讯的R包--The Plant Journal
算法
C++ 老炮儿的技术栈1 小时前
有符号变量与无符号变量的区别
服务器·开发语言·前端·数据结构·c++·算法·c
梦帮科技1 小时前
多任务权重流形融合:SLERP 球形线性插值、DARE 稀疏剪枝与多专家模型融合落地
人工智能·深度学习·算法·机器学习·tensorflow·聚类·剪枝
Tisfy1 小时前
LeetCode 0020.有效的括号:栈匹配
算法·leetcode·字符串·题解·括号匹配
测试学习test1 小时前
SPI读取W25Q64硬件驱动(HAL库)
数据库·stm32·嵌入式硬件·算法
迅猛龙办公室2 小时前
Python实现斐波那契数列
算法
淡海水2 小时前
02-01-原理篇-Mark-Sweep与变种算法
算法·unity·c#·游戏引擎·.net·gc