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

LeetCode 72. 编辑距离(动态规划)

题目:

链接:LeetCode 72. 编辑距离
难度:中等

给你两个单词 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 由小写英文字母组成

解题思路:

详见《Hello 算法》:编辑距离问题

代码:

class Solution {
public:int minDistance(string word1, string word2) {int n = word1.size();int m = word2.size();vector<vector<int>> dp(n + 1, vector<int>(m + 1));for (int i = 1; i <= n; i++) dp[i][0] = i; // 插入n个字符的操作数for (int j = 1; j <= m; j++) dp[0][j] = j;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (word1[i - 1] != word2[j - 1]) {dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1; // 对应插入、删除、替换三种操作} else {dp[i][j] = dp[i - 1][j - 1]; // 相同字符不需要操作}}}return dp[n][m];}
};

时间复杂度O(NM),空间复杂度O(NM)。N、M为字符串 word1 和 word2 的长度。

http://www.lryc.cn/news/218273.html

相关文章:

  • Bytedance揭秘OpenAI大模型: GPT-3到GPT-4进化路径
  • 第二十六章 BEV感知系列三(车道线感知)
  • 总结几个面试题
  • 【多线程】并发问题
  • httpclient工具类(支持泛型转换)
  • 【华为OD题库-003】最佳植树距离-Java
  • Oracle(12)Managing Indexes
  • DirectX3D 虚拟现实项目 三维物体的光照及着色(五个不同着色效果的旋转茶壶)
  • 【Verilog 教程】7.3 Verilog 串行 FIR 滤波器设计
  • 用golang实现一个基于interface的多态示例,展示其使用场景和优劣性。
  • ArcGIS for Android 禁止地图旋转
  • freertos静态创建任务
  • VBA根据Excel内容快速创建PPT
  • 服务器操作系统有哪些
  • 泄漏检测与修复(LDAR)过程管控平台(销售出租)VOCs便携式总烃分析仪(销售出租)
  • VueX 模块化和namespace
  • 7-4 修理牧场 分数 15
  • 自定义element-ui plus 函数式调用,在API,js中直接使用全局组件
  • [LeetCode]-876.链表的中间结点-206.反转链表-21.合并两个有序链表-203.移除链表元素
  • 通过git多人协调开发
  • CentOS 7 通过 yum 安装 MariaDB(Mysql)
  • 【Solidity】Remix在线环境及钱包申请
  • ARFoundation系列讲解 - 92 涂鸦效果
  • 立创eda专业版学习笔记(8)(运行模式)
  • 349.两个数组的交集+350.两个数组的交集II(set/multiset)
  • 数据结构与算法之排序: 桶排序 (Javascript版)
  • Android studio新版本多渠道打包配置
  • PTA:后序和中序构造二叉树
  • 二十三种设计模式全面解析-适配器模式的妙用:异构数据库和不同版本API的完美兼容!
  • K7系列FPGA进行FLASH读写1——CCLK控制(STARTUPE2原语)