多维线性DP

简介: 多维线性DP

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’)

提示:


image.png

for (int i = 1; i <= n; i++) {
  dp[i][0] = dp[i - 1][0] + 1;
}
for (int j = 1; j <= m; j++) {
  dp[0][j] = dp[0][j - 1] + 1;
}

最后完整化代码:

class Solution {
    public int minDistance(String word1, String word2) {
        int n = word1.length();
        int m = word2.length();
        int[][] dp = new int[n + 1][m + 1];
        for (int i = 1; i <= n; i++) {
          dp[i][0] = dp[i - 1][0] + 1;
        }
        for (int j = 1; j <= m; j++) {
          dp[0][j] = dp[0][j - 1] + 1;
        }
        for (int i = 1; i <= n; i++) {
          for (int j = 1; j <= m; j++) {
            dp[i][j] = Math.min(dp[i][j - 1] + 1, Math.min(dp[i - 1][j] + 1, dp[i - 1][j - 1] + ( word1.charAt(i - 1) != word2.charAt(j - 1) ? 1 : 0)));
          }
        }
        return dp[n][m];
    }
}

这个题做懂之后,建议做一下

P1279 字串距离


相关文章
|
存储 算法 C++
C++基础算法离散化及区间合并篇
C++基础算法离散化及区间合并篇
161 0
|
7月前
【错题集-编程题】不相邻取数(动态规划 - 线性 dp)
【错题集-编程题】不相邻取数(动态规划 - 线性 dp)
|
7月前
|
人工智能 JavaScript
【错题集-编程题】最大子矩阵(二维前缀和)
【错题集-编程题】最大子矩阵(二维前缀和)
|
7月前
【编程题-错题集】分割等和子集(动态规划 - 01背包)
【编程题-错题集】分割等和子集(动态规划 - 01背包)
|
算法
基础算法:离散化的基本应用
基础算法:离散化的基本应用
112 0
|
算法 Android开发
LeetCode 周赛上分之旅 #41 结合离散化的线性 DP 问题
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
76 0
|
算法 C++ 容器
基础算法-离散化
1. 离散化简介 离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。 离散化本质上可以看成是一种哈希,其保证数据在哈希以后仍然保持原来的全/偏序关系。 当有些数据因为本身很大或者类型不支持,自身无法作为数组的下标来方便地处理,而影响最终结果的只有元素之间的相对大小关系时,我们可以将原来的数据按照从大到小编号来处理问题,即离散化。 本文针对 整数、有序数组 进行离散化。
|
算法 测试技术
分治法解二维的最近对问题,算法分析与代码实现,蛮力法与分治法解决二维的最近对问题的区别
分治法解二维的最近对问题,算法分析与代码实现,蛮力法与分治法解决二维的最近对问题的区别
363 0
|
机器学习/深度学习
深度之眼(二)——矩阵及其基本运算
深度之眼(二)——矩阵及其基本运算
190 0
深度之眼(二)——矩阵及其基本运算
|
算法 C++
【基础算法训练】—— 一维前缀和
【基础算法训练】—— 一维前缀和
151 0
【基础算法训练】—— 一维前缀和