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

这篇具有很好参考价值的文章主要介绍了力扣72. 编辑距离(动态规划)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Problem: 72. 编辑距离

题目描述

力扣72. 编辑距离(动态规划),力扣题目,leetcode,动态规划,算法力扣72. 编辑距离(动态规划),力扣题目,leetcode,动态规划,算法

思路

由于易得将字符串word1向word2转换和word2向word1转换是等效的,则我们假定统一为word1向word2转换!!!

1.确定状态:我们假设现在有下标i,j分别指向字符串word1和word2尾部的字符,dp(i,j)表示当前的操作则:

1.1. dp(i- 1, j) + 1;表示删除,直接把word1[i]的这个字符删除掉,并前移i,继续跟j对比,同时操作数加一;
1.2. dp(i, j - 1) + 1;表示插入,直接把word1[1]处的这个字符插入到word2[j]处,并前移动j,继续和i对比;同时操作数加一;
1.3. dp(i - 1, j - 1) + 1;表示替换,将word1[i]替换为word2[j],同时往前移动i,j继续对比,同时操作数加一

2.确定状态转移方程:由于上述易得dp[i][j] = min(dp[i - 1][j] + 1;dp[i][j - 1] + 1;dp[i - 1][j - 1] + 1);

复杂度

时间复杂度:

O ( m × n ) O(m\times n) O(m×n)文章来源地址https://www.toymoban.com/news/detail-834411.html

空间复杂度:

O ( m × n ) O(m\times n) O(m×n)

Code

class Solution {
public:
    /**
     * Dynamic programming
     *
     * @param word1 Given string1
     * @param word2 Given string2
     * @return int
     */
    int minDistance(string word1, string word2) {
        int word1Len = word1.length();
        int word2Len = word2.length();
        vector<vector<int>> dp(word1Len + 1, vector<int>(word2Len + 1));
        for (int i = 1; i <= word1Len; ++i) {
            dp[i][0] = i;
        }
        for (int j = 1; j <= word2Len; ++j) {
            dp[0][j] = j;
        }

        for (int i = 1; i <= word1Len; ++i) {
            for (int j = 1; j <= word2Len; ++j) {
                if (word1.at(i - 1) == word2.at(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1];
                } else {
                    dp[i][j] = min3(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + 1);
                }
            }
        }
        return dp[word1Len][word2Len];
    }
    /**
     * Find the maximum of the three numbers
     *
     * @param a Given number
     * @param b Given number
     * @param c Given number
     * @return int
     */
    int min3(int a, int b, int c) {
        return min(a, min(b, c));
    }
};

到了这里,关于力扣72. 编辑距离(动态规划)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法leetcode|72. 编辑距离(rust重拳出击)

    给你两个单词 word1 和 word2 , 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 0 = word1.length, word2.length = 500 word1 和 word2 由小写英文字母组成 面对这道算法题目,二当家的再次陷入了沉思。 编

    2024年02月12日
    浏览(30)
  • 【算法】动态规划算法求(编辑距离)

    目录 编辑距离: 举例: 代码如下 调试: 核心代码: 画图演示上述代码:    是一种计算两个自符串之间差异程度的方法,它通过比较 两个字符串之间的插入,删除和 替换操作的数量 ,来确定他们之间的距离。 现有两个字符串 字符串s1:”CTGA\\\" 字符串s2:  \\\"ACGCTA\\\" 求s1和

    2024年02月12日
    浏览(28)
  • 【算法一则】编辑距离 【动态规划】

    给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 这个问题可以使用动态规划来解决。我们可以定义一个二维数组dp,其中dp[i][j]表示将word1的前i个字符转换成word

    2024年04月24日
    浏览(28)
  • 【leetcode 力扣刷题】回文串相关题目(KMP、动态规划)

    题目链接:5. 最长回文子串 题目内容: 题目就是要我们找s中的回文子串,还要是最长的。其实想想,暴力求解也行……就是遍历所有的子串,同时判断是不是回文串,是的话再和记录的最大长度maxlen比较,如果更长就更新。时间复杂度直接变成O(n^3)。 优化的点在于,假设子

    2024年02月09日
    浏览(34)
  • 算法刷题|583.两个字符串的删除操作、72.编辑距离

    题目:给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 dp[i][j] 表示以i-1结尾的word1子序列和以j-1结尾word2变成相同所需要的最小的步数为dp[i][j] 递推公式:分两种情况,word1.charAt(i-1) 和 word2.charAt(j-1)是否

    2024年02月08日
    浏览(30)
  • 编辑距离的动态规划

    编辑距离,也称 Levenshtein 距离,指两个字符串之间互相转换的最少修改次数,通常用于在信息检索和自然语言处理中度量两个序列的相似度。 Question 输入两个字符串 (s) 和 (t) ,返回将 (s) 转换为 (t) 所需的最少编辑步数。 你可以在一个字符串中进行三种编辑操作

    2024年04月08日
    浏览(29)
  • 【动态规划】求解编辑距离问题

    编辑距离问题是求解将⼀个字符串转换为另⼀个字符串所需的 插⼊、删除、替换 的最小次数。 C O M M O M → s u b C O M M U M → s u b C O M M U N → i n s C O M M U N E mathbb{COMMOM} overset{sub}{rightarrow} mathbb{COMMUM} overset{sub}{rightarrow}mathbb{COMMUN} overset{ins}{rightarrow} mathbb{COMMUNE} COMMOM →

    2024年02月02日
    浏览(33)
  • 编辑距离(动态规划)

    题目描述 给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 编辑距离:是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。 问题:word1到word2的

    2023年04月08日
    浏览(25)
  • 【动态规划----“最小编辑距离”问题(C++解决)】

    给定两个字符串A和B,以及下列三种字符运算: (1)删除一个字符(2)插入一个字符(3)将一个字符改写为另一个字符 设计算法求将A通过以上三种操作转换为B的最小次数 举例: “xy” = “xz”,只需要把 y 替换成 z,因此,最小编辑距离为 1。 “xyz” = “xy”,只需要删除

    2024年04月25日
    浏览(74)
  • 一维动态规划经典力扣题目(一)

    目录 题一:斐波那契数列 题目二:最低票价 题三:解码方法 递归方法是2的n次方的时间复杂度。 递归代码: 带有缓存的递归,会使时间复杂度得到大幅度优化。 时间复杂度为O(n)。 缓存即记录中间值         优化的方法:         代码:         代码:

    2024年02月21日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包