多维线性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 字串距离


相关文章
|
6月前
|
存储 算法 C++
C++基础算法离散化及区间合并篇
C++基础算法离散化及区间合并篇
|
6天前
|
数据可视化
R语言极值理论:希尔HILL统计量尾部指数参数估计可视化
R语言极值理论:希尔HILL统计量尾部指数参数估计可视化
|
6天前
R语言区间数据回归分析
R语言区间数据回归分析
|
9月前
|
算法
基础算法:离散化的基本应用
基础算法:离散化的基本应用
76 0
|
6天前
|
设计模式 算法 知识图谱
算法设计与分析(贪心法)
【1月更文挑战第1天】在分析问题是否具有最优子结构性质时,通常先设出问题的最优解,给出子问题的解一定是最优的结论。证明思路是:设原问题的最优解导出子问题的解不是最优的,然后在这个假设下可以构造出比原问题的最优解更好的解,从而导致矛盾。(一个问题能够分解成各个子问题来解决,通过各个子问题的最优解能递推到原问题的最优解,此时原问题的最优解一定包含各个子问题的最优解,这是能够采用贪心法来求解问题的关键)贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择获得,即通过一系列的逐步局部最优选择使得最终的选择方案是全局最优的。
79 1
|
10月前
数学问题之(高精快速幂)
数学问题之(高精快速幂)
|
10月前
|
算法 C语言
海量数据中找出前k大数(topk问题),一篇文章教会你
海量数据中找出前k大数(topk问题),一篇文章教会你
325 0
|
算法 C++ 容器
基础算法-离散化
1. 离散化简介 离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。通俗的说,离散化是在不改变数据相对大小的条件下,对数据进行相应的缩小。 离散化本质上可以看成是一种哈希,其保证数据在哈希以后仍然保持原来的全/偏序关系。 当有些数据因为本身很大或者类型不支持,自身无法作为数组的下标来方便地处理,而影响最终结果的只有元素之间的相对大小关系时,我们可以将原来的数据按照从大到小编号来处理问题,即离散化。 本文针对 整数、有序数组 进行离散化。
|
算法
【算法竞赛进阶指南】車的放置(行列模型二分图最大匹配+匈牙利算法)
【算法竞赛进阶指南】車的放置(行列模型二分图最大匹配+匈牙利算法)
82 0
|
机器学习/深度学习 存储 算法
【基础算法训练】—— 01背包 + 排序
【基础算法训练】—— 01背包 + 排序
152 0
【基础算法训练】—— 01背包 + 排序