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

[力扣DP]72. 编辑距离

LeetCode 编辑距离

题目描述

给你两个单词 word1word2, 请返回将 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 由小写英文字母组成

LeetCode 原题链接

参考思路

在这里插入图片描述

状态表示

dp[i][j] 表示单词1的前i个字母 <–> 单词2的前j个字母的最小路径

动态转移方程

if (word1[i] == word2[j]) {dp[i][j] = dp[i-1][j-1];
} else if (word1[i] != word2[j]) {dp[i][j] = min({dp[i-1][j-1], dp[i-1][j], dp[i][j-1]}) + 1;
}

边界设置

在dp中的索引为0表示空字符

代码

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

相关文章:

  • 机器学习——元学习
  • python外网下载指定库导入内网的方法
  • 美易官方:盘前道指期货涨0.5%,游戏驿站跌逾15%
  • Thingworx高可用集群部署(八)-Ignite集群部署
  • jsp指令和动作
  • Unity PS5开发 天坑篇 之 URP管线与HDRP管线部署流程以及出包介绍04
  • 快速幂算法在Java中的应用
  • vue页面实现左右div宽度,上下div高度分割线手动拖动高度或者宽度自动变化,两个div宽度或者高度拉伸调节,实现左右可拖动改变宽度的div内容显示区
  • 通过Caliper进行压力测试程序,且汇总压力测试问题解决
  • 20款Python办公自动化库精选,一键提升效率!
  • itextPdf生成pdf简单示例
  • 前后端实时数据通信
  • ESP32
  • python爬虫----python列表高级
  • 【踩坑】使用CenterNet训练自己的数据时的环境配置与踩坑
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Angularjs之国际化
  • Docker下部署自己的LNMP工作环境
  • Druid 在有赞的实践
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • js 实现textarea输入字数提示
  • Linux CTF 逆向入门
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Linux下的乱码问题
  • python3 使用 asyncio 代替线程
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • VuePress 静态网站生成
  • 分布式熔断降级平台aegis
  • 高程读书笔记 第六章 面向对象程序设计
  • 嵌入式文件系统
  • 深入浏览器事件循环的本质
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 以太坊客户端Geth命令参数详解
  • 用Visual Studio开发以太坊智能合约
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​Spring Boot 分片上传文件
  • ​ssh免密码登录设置及问题总结
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • (16)Reactor的测试——响应式Spring的道法术器
  • (ZT)出版业改革:该死的死,该生的生
  • (二)linux使用docker容器运行mysql
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (汇总)os模块以及shutil模块对文件的操作
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十三)Flask之特殊装饰器详解
  • .NET应用架构设计:原则、模式与实践 目录预览
  • ??在JSP中,java和JavaScript如何交互?
  • @html.ActionLink的几种参数格式
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [AIGC] 开源流程引擎哪个好,如何选型?
  • [android学习笔记]学习jni编程
  • [C++基础]-初识模板
  • [ChromeApp]指南!让你的谷歌浏览器好用十倍!
  • [Docker]四.Docker部署nodejs项目,部署Mysql,部署Redis,部署Mongodb