最小编辑距离

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();

    }
};
原文地址:https://www.cnblogs.com/inception6-lxc/p/9354850.html