当前位置: 首页 > news >正文

代码随想录|动态规划|50编辑距离

leetcode:72. 编辑距离 - 力扣(LeetCode)

题目

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

  • 插入一个字符

  • 删除一个字符

  • 替换一个字符

  • 示例 1:

  • 输入:word1 = "horse", word2 = "ros"

  • 输出:3

  • 解释: horse -> rorse (将 'h' 替换为 'r') rorse -> rose (删除 'r') rose -> ros (删除 'e')

  • 示例 2:

  • 输入:word1 = "intention", word2 = "execution"

  • 输出:5

  • 解释: intention -> inention (删除 't') inention -> enention (将 'i' 替换为 'e') enention -> exention (将 'n' 替换为 'x') exention -> exection (将 'n' 替换为 'c') exection -> execution (插入 'u')

提示:

  • 0 <= word1.length, word2.length <= 500
  • word1 和 word2 由小写英文字母组成

思路

动归五部曲

(1)dp含义

以[i-1]结尾的word1和以[j-1]结尾的word2,最近的编辑距离是dp[i][j]

(2)递推公式

还是考虑两种情况

  • word1[i - 1] == word2[j - 1]

dp[i][j]=dp[i-1][j-1]

  • word1[i - 1] != word2[j - 1]

这时候就要考虑3中情况,分别是 增、删、改。

word1增 等价于 word2删,所以有如下改变:

原来是:word1增、删、改           变成word2

现在是:word2删、word1删、word1改        变成word2

word1删:dp[i][j]=dp[i-1][j]+1

word2删:dp[i][j]=dp[i][j-1]+1

word1改:

如果是相同的情况下,那么dp[i][j]=dp[i-1][j-1]

但现在是不同的情况,最后一个字符需要改变,因此dp[i][j]=dp[i-1][j-1]+1

最终取这3个情况的最小值。

(3)dp初始化

跟上面那道题一样,dp[i][0]=i dp[0][j]=j

(4)遍历顺序

跟之前一样。

代码如下:

class Solution
{
public:int minDistance(string word1, string word2){int m = word1.size(), n = word2.size();vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));for (int i = 0; i <= m; i++){dp[i][0] = i;}for (int j = 0; j <= n; j++){dp[0][j] = j;}for (int i = 1; i <= m; i++){for (int j = 1; j <= n; j++){if (word1[i - 1] == word2[j - 1]){dp[i][j] = dp[i - 1][j - 1];}else{dp[i][j] = min({dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + 1});}}}return dp[m][n];}
};

总结

编辑距离系列终于搞完了,其实把dp的含义确定之后,再去找递推公式,递推公式一般也是分析两种情况。

参考资料

 代码随想录

相关文章:

  • oracle从表B更新拼接字段到表A
  • Fiddler Everywhere 安卓手机抓包
  • 一文了解 GPU 服务器及其在数据中心中的角色
  • 常见的MySQL索引类型
  • Day44打卡 @浙大疏锦行
  • MVCC理解
  • c++ STL 仿函数和适配器(算法常用)
  • Java运行环境配置日志(Log)运行条件,包含鸿蒙HarmonyOS
  • 【Java】CopyOnWriteArrayList
  • 【OSG学习笔记】Day 15: 路径动画与相机漫游
  • 结构性设计模式之Facade(外观)设计模式
  • 【二分图 图论】P9384 [THUPC 2023 决赛] 着色|普及+
  • SpringAI(GA):Nacos2下的分布式MCP
  • vue 打包报错 Cannot find module ‘@vue/cli-plugin-babel/preset‘ - thread-loader
  • vue-16(Vuex 中的模块)
  • 2025年渗透测试面试题总结-腾讯[实习]安全研究员(题目+回答)
  • IEEE ICBCTIS 2025 会议征稿:探索区块链与信息安全的前沿学术之旅​
  • 学习STC51单片机27(芯片为STC89C52RCRC)
  • PageHelper-分页插件
  • PaddleOCR(2):PaddleOCR环境搭建
  • 男同志做爰网站/山东疫情最新情况
  • 标准件做网站推广效果怎么样/为什么sem的工资都不高
  • 龙岗外贸网站制作/北京seo邢云涛
  • 做下载网站赚钱/活动营销推广方案
  • wordpress购物网站/搜索引擎营销总结
  • 5网站建站/中国三大搜索引擎