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

【代码如下图所示】

相关推荐
302wanger37 分钟前
分享一个工作习惯:整点看即时消息
算法
洋不写bug2 小时前
排序(一)基础排序,插入|希尔|冒泡|直接选择排序详解
java·算法·排序算法·插入排序·冒泡排序·希尔排序·直接选择排序
牧羊人.3332 小时前
动手学深度学习 03 | 卷积神经网络实现手写数字识别
人工智能·深度学习·神经网络·算法·cnn
AgentMaster3 小时前
数据治理工具选型指南:一套可复用的四阶段决策框架
大数据·数据结构·人工智能·算法
liliangcsdn3 小时前
最终留出样本/样本外测试集-holdout解读
算法
爱敲代码的小黄3 小时前
机器学习入门:从数据、训练到业务决策
算法
数据知道3 小时前
哈希与密码存储——bcrypt、Argon2、盐值与彩虹表
网络·算法·安全·网络安全·密码学·哈希算法
haon11224 小时前
树模型在信贷风控怎么用——从决策树到 XGBoost
大数据·人工智能·算法·决策树·机器学习·数据挖掘
wordbaby4 小时前
BM25 是什么?手把手拆解搜索引擎的核心算法
人工智能·算法