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

【代码如下图所示】

相关推荐
秋天的怀念_David19 分钟前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
秋天的怀念_David1 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
薛定e的猫咪1 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
薛定e的猫咪1 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
java_nnnn3 小时前
LeetCode刷题滑动窗口(水果成篮+找到字符串中所有字母的异位词)Java
java·开发语言·leetcode
小羊没烦恼!3 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
wanderist.3 小时前
202609CSP认证P3
算法
云淡风轻~窗明几净4 小时前
角谷猜想最接近严格证明的测试 Version1.1.1
人工智能·算法·机器学习·图论
机器学习之心4 小时前
PINN × SVM × NSGA-II × 熵权TOPSIS:一套跑通「建模—优化—决策」的多目标优化框架
算法·机器学习·支持向量机
别动我齐刘海5 小时前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人