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

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 由小写英文字母组成

动态规划

dp[i][j] 表示以下标i-1为结尾的字符串word1,和以下标j-1为结尾的字符串word2,最近编辑距离为dp[i][j]。
这样定义的目的是便于初始化数组。

增加操作:dp[i][j-1]+1
删除操作:dp[i-1][j]+1
改操作:dp[i-1][j-1]+1

当word1[i-1]==word2[j-1]时,则dp[i][j]=dp[i-1][j-1],无需操作

class Solution {
public:int dp[505][505];int minDistance(string word1, string word2) {int len1=word1.size(),len2=word2.size();//初始化数组操作for(int i=0;i<=len1;i++) dp[i][0]=i;for(int i=0;i<=len2;i++) dp[0][i]=i;for(int i=1;i<=len1;i++){for(int j=1;j<=len2;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]+1,min(dp[i-1][j]+1,dp[i][j-1]+1));}}return dp[len1][len2];}
};
http://www.lryc.cn/news/311950.html

相关文章:

  • 【MySQL】视图、索引
  • 反编译java生成的.class文件
  • Cookie 探秘:了解 Web 浏览器中的小甜饼
  • Python线性代数数字图像和小波分析之二
  • LC.exe”已退出,代码为 -1
  • springboot + jpa + 达梦数据库兼容 Mysql的GenerationType.IDENTITY主键生成策略
  • Redis优化与应用
  • 深入了解Kafka的文件存储原理
  • RabbitMQ 高级
  • 音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(Android)
  • 直播美颜SDK开发指南:构建个性化的主播美颜工具
  • 羊大师揭秘,羊奶有哪些好处和不足呢?
  • 鸿蒙问题之CustomDialog后持久化@state数据崩溃
  • 微服务高性能通信技术-gRPC实战落地
  • 洛阳旅游攻略
  • 图论例题解析
  • 图解 TCP 拥塞控制
  • Nginx配置文件的整体结构
  • [SpringCloud] OpenFeign核心架构原理 (三)
  • elementUI Table组件点击取当前行索引
  • 组基轨迹建模 GBTM的介绍与实现(Stata 或 R)
  • 解决前端性能问题:如何优化大量数据渲染和复杂交互?
  • 【Vue3】深入理解Vue中的ref属性
  • CentOS上安装与配置Nginx
  • DataGrip 连接 Centos MySql失败
  • 【图论】图的遍历 - 构建领接表(无向图)
  • Claude 3家族惊艳亮相:AI领域掀起新浪潮,GPT-4面临强劲挑战
  • Linux Watchdog 机制是什么
  • Linux权限问题
  • python基础练习题目