zoukankan      html  css  js  c++  java
  • 最小编辑距离

    DP操作建模

    dp[i][j]代表字符串word1[0...i-1]与word2[0...j-1]的最小编辑距离。

    对于编辑距离的三个操作来说:
    插入举例:X:=ex  VS Y:=exp
    前面的两个ex都是相同,则编辑距离不变为0,X没有第三个字符,这里如果我们插入了一个字符即可。dp[i][j]=dp[i][j-1]+1;
     
    删除举例: X:= exp VS Y:= ex
    我故意用了这个例子,也就是说插入和删除是互逆的,就是看我们以谁为对象来看待这个问题。dp[i][j]=dp[i-1][j]+1;
     
    替代举例: X:= sitten VS Y:=sitting
    这里例子的第五个字符需要替代,为什么要替代呢? 因为第四个字符和第六个字符相同(这里就需要用DP,也就是说,需要一个空间来记录之前的比较结果和之后的比较结果)。
    class Solution {
    public:
        int minDistance(string word1, string word2) {
            int size1 = word1.size(), size2 = word2.size();
            vector<vector<int>> dp(size1 + 1, vector<int>(size2 + 1, 0));
            for (int i = 0; i <= size1; i++) dp[i][0] = i;
            for (int j = 0; j <= size2; j++) dp[0][j] = j;
            for (int i = 1; i <= size1; i++) {
                for (int j = 1; j <= size2; j++) {
                    int replace = word1[i - 1] == word2[j - 1] ? dp[i - 1][j - 1] : dp[i - 1][j - 1] + 1;
                    int ins_del = min(dp[i][j - 1], dp[i - 1][j]) + 1;
                    dp[i][j] = min(replace, ins_del);
                }
            }
            return dp.back().back();
    
        }
    };
  • 相关阅读:
    ubuntu挂载群晖共享文件
    200. 岛屿数量_中等_不再记笔记了
    733. 图像渲染_简单_矩阵
    46. 全排列_中等_模拟
    37. 解数独_困难_矩阵
    1041. 困于环中的机器人_中等_模拟
    946. 验证栈序列
    415. 字符串相加_简单_模拟
    164. 最大间距_数组_困难
    215. 数组中的第K个最大元素_中等_数组
  • 原文地址:https://www.cnblogs.com/inception6-lxc/p/9354850.html
Copyright © 2011-2022 走看看