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();
    
        }
    };
  • 相关阅读:
    台阶问题,100层台阶,1,2,3步组合走完。一种有几种组合?
    idea 导入gitlab项目
    查找学生信息
    谁是你潜在的朋友
    Sort
    统计同成绩学生人数
    打印日期
    今年的第几天?
    DayOfWeek
    日期差值
  • 原文地址:https://www.cnblogs.com/inception6-lxc/p/9354850.html
Copyright © 2011-2022 走看看