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

leetcode hot100 之 编辑距离

给你两个单词 word1word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。

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

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

输入:word1 = “horse”, word2 = “ros”
输出:3
解释:
horse -> rorse (将 ‘h’ 替换为 ‘r’)
rorse -> rose (删除 ‘r’)
rose -> ros (删除 ‘e’)

原题链接:https://leetcode.cn/problems/edit-distance/

思路

以 dp[i][j] 表示 word1[0: i]、word2[0: j] 的编辑距离。

转移方程:
当 word1[i] == word2[j] 时,此时无需操作,dp[i][j] = dp[i-1][j-1]
当 word1[i] != word2[j] 时,dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1
这里 dp[i-1][j-1], dp[i-1][j], dp[i][j-1] 三项分别代表 替换、删除、增加。

边界条件:
当 i = 0 或 j = 0 时,显然 dp[i][0] 或 dp[0][j] 等于另一个子字符串的长度。即 dp[i][0] = i 、dp[0][j] = j

代码

class Solution {
public:int minDistance(string word1, string word2) {// if word1[i] == word2[j], dp[i][j] = dp[i-1][j-1]// else: dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1int m = word1.size();int 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(min(dp[i-1][j-1], dp[i-1][j]), dp[i][j-1]) + 1;}}}return dp[m][n];}
};
http://www.lryc.cn/news/371616.html

相关文章:

  • 杨校老师项目之基于SpringBoot的理发店的预约管理系统
  • SpringAI学习及搭建AI原生应用
  • CobaltStrike权限传递MSF
  • 白嫖 kimi 接口 api
  • 借助ChatGPT完成课题申报书中框架思路写作指南
  • SuntoryProgrammingContest2024(AtCoder Beginner Contest 357)
  • 重温共射放大电路
  • [DDR5 Jedec] 读操作 Read Command 精讲
  • opencv 通过滑动条调整阈值处理、边缘检测、轮廓检测、模糊、色调调整和对比度增强参数 并实时预览效果
  • 防火墙安全管理
  • MyQueue(队列)
  • 【Pytorch】一文向您详细介绍 torch.nn.DataParallel() 的作用和用法
  • Windows本地使用SSH连接VM虚拟机
  • RPC(远程过程调用):技术原理、应用场景与发展趋势
  • iSCSI和FC存储
  • MPT(merkle Patricia trie )及理解solidity里的storage
  • 【代码随想录算法训练营第三十五天】 | 1005.K次取反后最大化的数组和 134.加油站 135.分发糖果
  • 桌面应用开发框架比较:Electron、Flutter、Tauri、React Native 与 Qt
  • 学习笔记丨嵌入式BI分析的12个关键功能
  • PostgreSQL17优化器改进(3)在使用包含操作符<@和@>时优化范围查询
  • 【因果推断python】32_合成控制2
  • Linux-笔记 全志平台OTG虚拟 串口、网口、U盘笔记
  • Qt实现SwitchButton滑动开关按钮组件
  • C++进阶:继承
  • SFTP工具
  • 服务器数据恢复—vxfs文件系统元数据被破坏的数据恢复案例
  • 【SCAU数据挖掘】数据挖掘期末总复习题库简答题及解析——上
  • 云时代的Java:在云环境中实施Java的最佳实践
  • STL - 常用算法
  • Qt | QTextStream 类(文本流)