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

72. 编辑距离

题目介绍

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

解答

class Solution {
public:int minDistance(string word1, string word2) {// dp[i][j] 表示以word1中下标 i-1 结尾的字符串 和 以word2中下标 j-1 为结尾的字符的最近编辑距离// if(word1[i - 1] == word2[j - 1]) dp[i][j] = dp[i - 1][j - 1];// if(word1[i - 1] != word2[j - 1])// 操作1:word1删除一个元素,那么就是以下标i - 2为结尾的word1 与 以j-1为结尾的word2的最近编辑距离 +1,即 dp[i][j] = dp[i - 1][j] + 1;// !!!操作2: word2删除一个元素(相当于word1添加一个元素),那么就是以下标i - 1为结尾的word1 与 以j-2为结尾的word2的最近编辑距离 +1,即 dp[i][j] = dp[i][j - 1] + 1;// 操作3:替换元素,word1替换 word1[i - 1]使其与 word2[j - 1] 同,此时只需要求得两字符串前面部分的最小编辑距离即 dp[i][j] = dp[i - 1][j - 1] + 1;// 综上取三个操作的最小者// 注意:word1删除元素变为word2,和word2添加元素变为word1操作步骤是一样的vector<vector<int>> dp(word1.size() + 1, vector<int>(word2.size() + 1, 0));// 由于dp[i][j] 是由其上方和左边元素推导,所以初始化第一行和第一列// dp[i][0] 表示以word1[i - 1] 结尾的字符串 和 以 word2[-1] 的字符串的最近编辑距离for(int i = 0; i <= word1.size(); i++) dp[i][0] = i; // 删除i次for(int j = 0; j <= word2.size(); j++) dp[0][j] = j;for(int i = 1; i <= word1.size(); i++){for(int j = 1; j <= word2.size(); 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], min(dp[i][j - 1], dp[i - 1][j - 1])) + 1;}}return dp[word1.size()][word2.size()];}
};
http://www.lryc.cn/news/115283.html

相关文章:

  • Android12.0 原生系统SystemUI下拉状态栏和通知栏视图之锁屏通知布局
  • 周末在家值班,解决几个月前遗忘的Bug
  • Shell编程基础(十五)文本三剑客(sed)
  • 5,二叉树【p6-p7】
  • 【Spring】如果你需要使用重试机制,请使用Spring官方的Spring Retry
  • pagehelper 优化自定义分页和排序位置
  • Linux下查询文件夹中文件数量的方法
  • PS透明屏,在科技展示中,有哪些优点展示?
  • Hbase-面试题
  • 图的宽度优先深度优先遍历
  • redis Set类型命令
  • Netty框架自带类DefaultEventExecutorGroup的作用,用来做业务的并发
  • TCP的四次挥手与TCP状态转换
  • 【网络编程】实现一个简单多线程版本TCP服务器(附源码)
  • centos离线部署docker
  • ffmpeg使用滤镜对视频进行处理播放
  • Ansible Handlers模块详解,深入理解Ansible Handlers 自动化中的关键组件
  • threejs点击模型实现模型边缘高亮的选中效果--更改后提高帧率
  • RocketMQ 主备自动切换模式部署
  • 【MySQL】select相关
  • 在Python中应用RSA算法实现图像加密:基于Jupyter环境的详细步骤和示例代码
  • Prometheus Blackbox Exporter 的 HTTP 探测指标中各个阶段的时间统计信息
  • 数据结构之时间复杂度-空间复杂度
  • 新一代构建工具 maven-mvnd
  • 构建Docker容器监控系统(2)(Cadvisor +Prometheus+Grafana)
  • Leetcode.995 K 连续位的最小翻转次数
  • PHP8的跳转语句-PHP8知识详解
  • Idea中maven无法下载源码
  • 【linux-keepalive】keepalive避免单点故障,高可用配置
  • 测试网络模型的FLOPs和params