首页 > 其他分享 >LeetCode72. 编辑距离(2024冬季每日一题 37)

LeetCode72. 编辑距离(2024冬季每日一题 37)

时间:2024-12-21 16:26:49浏览次数:7  
标签:LeetCode72 字符 word int 37 2024 word1 word2 字符串

给你两个单词 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 < = w o r d 1. l e n g t h , w o r d 2. l e n g t h < = 500 0 <= word1.length, word2.length <= 500 0<=word1.length,word2.length<=500
  • word1 和 word2 由小写英文字母组成

思路:动态规划

  • 字符串 word1 的长度为 n,word2 的长度 为 m

  • 定义 f[i][j] 为将字符串 word1[1…i] 转换为 word[2…j] 所需要的最少操作次数

  • 初始时,需要在 word1 和 word2 前面塞一个不存在的 字符,使得下标可以从 1 开始,这样后面就不需要做特殊判断

    • j = 0时,f[i][0] 表示将字符串 word[1…i] 转换为空字符串需要的最短操作次数,显然,可以删除所有字符,使其变为空,所以操作次数 f[i][0] = i
    • i = 0时,f[0][j] 表示将字符串 空字符串 转换为 word2[1…j] 需要的最短操作次数,显然,可以每次添加一个字符,使其变为word[1…j],所以操作次数 f[0][j] = j
  • f[i][j] 的状态转移方程可以进行如下定义:

    • 如果 word1[i] == word[j],说明它们的最后一个字符相等,不用任何操作,则 f[i][j] = f[i-1][j-1],如果 word1[i] != word[j],则需要修改word1[i] 的最后一个字符 f[i][j] = f[i-1][j-1] + 1
    • 如果 word1[i] -> word2[j] 需要添加一个字符,则说明 word1[1…i] == word2[1…j-1] 则 f[i][j-1] + 1
    • 如果 word1[i] -> word2[j] 需要删除一个字符,则说明 word1[1…i-1] == word2[1…j] 则 f[i-1][j] + 1
  • 所以最终 f[i][j] 取上面几种情况的最小值即可,则有
    f[i][j] = min(f[i-1][j], f[i][j-1]) + 1;
    f[i][j] = min(f[i][j], f[i-1][j-1] + (word1[i] != word2[j]));

class Solution {
public:
    int f[510][510];
    int minDistance(string word1, string word2) {
        int n = word1.size(), m = word2.size();
        word1 = "#" + word1, word2 = "#" + word2;
        memset(f, 0x3f, sizeof f);
        for(int i = 0; i <= n; i++) f[i][0] = i;
        for(int j = 0; j <= m; j++) f[0][j] = j;
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                f[i][j] = min(f[i-1][j], f[i][j-1]) + 1;
                f[i][j] = min(f[i][j], f[i-1][j-1] + (word1[i] != word2[j]));
            }
        }
        return f[n][m];
    }
};

标签:LeetCode72,字符,word,int,37,2024,word1,word2,字符串
From: https://blog.csdn.net/qq_46456049/article/details/144609796

相关文章

  • 2024-2025-1 20241417 《计算机基础与程序设计》第十三周学习总结
    2024-2025-120241417《计算机基础与程序设计》第十三周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>2024-2025-1计算机基础与程序设计第十三周作业这个作业的目标<复习前面所学,完成......
  • 2024-2025-1 20241307《计算机基础与程序设计》第十三周学习总结
    作业信息这个作业属于哪个课程(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里([2024-2025-1计算机基础与程序设计第十三周作业]这个作业的目标作业正文(2024-2025-1学号20241307《计算机基础与程序设计》第十三周学习总结)教材学习内容总结C语言程序......
  • 2024-2025-1 20241312 《计算机基础与程序设计》第十三周学习总结
    学期(2024-2025-1)学号(20241312)《计算机基础与程序设计》第十三周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标加入云......
  • 2024年CSP-J普及组初赛真题试卷
    2024年CSP-J普及组初赛真题试卷可前往题库中心,在线模拟测评,高效,方便~2024年CSP-J普及组初赛真题试卷_c++_嗨信奥-玩嗨信息奥林匹克竞赛-少儿编程题库学习中心https://www.hixinao.com/tidan/cpp/show-160.html......
  • 2024年CCF 非专业级软件能力认证CSP-J/S 第二轮( 提高组) 染色(color)
    完整题目内容可前往下方链接:染色(color)_C++_嗨信奥-玩嗨信息奥林匹克竞赛-少儿编程题库学习中心https://www.hixinao.com/tiku/cpp/show-4118.html若需更多真题,可前往题库中心查找,题库中心涵盖白名单赛事真题,考级真题,可节省找题时间,助力备考~嗨信奥-玩嗨信息奥林匹克竞赛......
  • 大模型--采样技术 TopK TopP 惩罚系数--37
    目录1.参考2.概述重复惩罚(RepetitionPenalty)1.参考https://mp.weixin.qq.com/s/mBZA6PaMotJw7WeVdA359g2.概述大型语言模型(LLMs)通过“根据上下文预测下一个token的概率分布”来生成文本。最简单的采样方法是贪心采样(GreedySampling),它在每一步选择概率最高的token。......
  • MediaWIKI 1.42 2024 教程系列 — 安装MediaWIKI
    背景对于新手来说,网上多数教程并不完善,也没有针对新版本更新教程。在安装过程中遇到很多类似的问题,也翻阅很多资料才得以解决。为了总结经验,给更多人提供帮助,同时避免走弯路,于是决定编写一篇Mediawiki系列文章。前言1.选型:开源免费的WIKI,主要有MediaWiki,Xwiki,JsWIKI等。如......
  • 2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有 n 名魔法师排
    2024-12-21:从魔法师身上吸取的最大能量。用go语言,在一个神秘的地牢里,有n名魔法师排成一列。每位魔法师都有一个能量属性,有的提供正能量,而有的则会消耗你的能量。你被施加了一种诅咒,吸收来自第i位魔法师的能量后,你会立即被传送到第(i+k)位魔法师。在这个过程中,你会不断进......
  • 川土微代理商深圳|CA-IS3740,CA-IS3741,CA-IS3742高性能四通道数字隔离芯片
    CA-IS3740,CA-IS3741,CA-IS3742产品特性•信号传输速率:DCto150Mbps•宽电源电压范围:2.5Vto5.5V•宽温度范围:‐40°Cto125°C•无需启动初始化•默认输出高电平和低电平选项•优异的电磁抗扰度•高CMTI:±150kV/µs(典型值)•低功耗,(典型值):  ▪电流为1.5mA/通道(@5V,1Mbp......
  • 2024.12.20,数据结构课项目,解压与自解压,记录
    std::ifstream有什么成员函数std::ifstream是C++标准库中的输入文件流类,用于从文件中读取数据。它继承自std::istream,因此具有std::istream的所有成员函数。此外,它还提供了一些特定于文件操作的成员函数。常用成员函数构造函数:std::ifstream():默认构造函数。std::if......