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

动态规划--编译距离

72. 编辑距离https://leetcode.cn/problems/edit-distance/

题目速览:

给你两个单词 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')

分析过程:

1.状态表示:

        定义 dp[i][j] 表示将s1的前i个字符转换为s2的前j个字符所需的最少操作次数。

2.状态转移方程:

        当s1[i]==s2[j]时,字符相同,不需要操作,此时dp[i][j]=dp[i-1][j-1];

        当s1[i]不等于s2[j]时,此时要考虑三种操作·:

                1.删除:dp[i][j]=dp[i-1][j]+1,删去s1字符串的第i个字符;

                2.插入:dp[i][j]=dp[i][j-1]+1,将s2的的第j个字符到s1;

                3.替换:dp[i][j]=dp[i-1][j-1] + (s1[i-1] == s2[j-1] ? 0 : 1)

        然后取这三种情况的最小值:

dp[i][j] = min(
    dp[i-1][j] + 1,     // 删除
    dp[i][j-1] + 1,     // 插入
    dp[i-1][j-1] + (s1[i-1] == s2[j-1] ? 0 : 1)  // 替换或不变
);

3.初始化

  dp[0][j] = j:将空字符串转换为word2的前j个字符,需要j次插入

  dp[i][0] = i:将word1的前i个字符转换为空字符串,需要i次删除

代码示例:

class Solution {
public:int minDistance(string s1, string s2) {int m=s1.size(),n=s2.size();vector<vector<int>> dp(m+1,vector<int>(n+1));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(s1[i-1]==s2[j-1]) dp[i][j]=dp[i-1][j-1];else{dp[i][j]=min({dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1});}}}return dp[m][n];}
};

        这个算法是解决编辑距离问题的标准方法,在很多实际应用中都有使用,比如拼写检查、DNA序列比对等。

http://www.dtcms.com/a/348959.html

相关文章:

  • AI代码生成器全面评测:六个月、500小时测试揭示最强开发助手
  • Redis 高可用篇
  • 51单片机-实现定时器模块教程
  • GaussDB 数据库架构师修炼(十八) SQL引擎-统计信息
  • 用 WideSearch 思路打造「零幻觉、全覆盖」的多 Agent 信息收集器
  • SRE 系列(四)| MTTI 与 On-Call:高效故障响应之道
  • C++标准库算法:从零基础到精通
  • Go语言 Hello World 实例
  • 数据标注的质检环节有多少种
  • 单表查询-分析函数的应用
  • 智能体之推理引擎(3)
  • 记一次使用 C++ 实现多种扑克牌逻辑
  • ptrade `get_fundamentals` - 获取财务数据
  • 58 C++ 现代C++编程艺术7-模板友元
  • VC2022连接mysql
  • 微服务-21.网关路由-路由属性
  • 2025年KBS SCI1区TOP,新颖奖励与ε-贪婪衰减Q-learning算法+局部移动机器人路径规划,深度解析+性能实测
  • AI基础学习周报十
  • AI产品经理面试宝典第74天:技术边界与商业闭环的面试问题与答法
  • Trip Footprint_旅行分享功能模块技术架构天气模块技术架构
  • COSMIC智能化编写工具:革命性提升软件文档生成效率
  • 【文献阅读】Land degradation drivers of anthropogenic sand and dust storms
  • docker安装及常用命令
  • 卷王问卷考试系统—测试报告
  • 不只是关键词匹配:AI如何像人类一样‘听懂‘你在说什么
  • 【电路笔记 通信】混频器+混频器芯片(FSK/ASK收发器IC超外插接收器IC)+外差接收机 超外差接收机
  • Html相关
  • hot100 之104-二叉树的最大深度(递归+二叉树)
  • 分治--常见面试问题
  • 协程解决了什么问题