首页 > 其他 > 详细

leetcode 72 编辑距离 DP

时间:2021-04-19 11:35:22      阅读:23      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

放一个精选题解

技术分享图片

 

 

一定要考虑边界情况,二者均为空的情况,以及学习这种递推式的设计(到word1的i位置的字符串转为到word2的j位置的字符串这种关系的设计)

在i位置和j位置二者不一样时,对于替换删除和增加的理解:

因为是要把word1到i位置的字符串变成word2的字符串的j位置的字符串,所以最终的结果i位置和j位置一定是一样的。如果是替换,就相当于直接让二者的最后一个位置相等了,然后回过头来看dp[i-1][j-1]

如果是删除,那把word1的第i个删除掉,也只能回过头来看dp[i-1][j]了,如果是插入一个,那相当于i+1的位置和j的位置要一致,那就要回过头来看dp[i][j-1]了。所以有这三种递推式。千万记得这三种的选择都是一种操作,选出来最小的操作一定要加1.

DP就是有这种强大的能力让复杂事情简单化!

class Solution {
public:
    int minDistance(string word1, string word2) {
        int m=word1.size();
        int n=word2.size();
        vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
        //多一行一列存边界情况
        for (int i = 0; i < m+1; i++) {
            dp[i][0] = i;
        }
        for (int j = 0; j < n+1; j++) {
            dp[0][j] = j;
        }

        for (int i = 1; i < m+1; i++) {
            for (int j = 1; j < n+1; j++) {
                if (word1[i - 1] == word2[j - 1]) {
                    dp[i][j] = dp[i - 1][j - 1];
                }
                else{
                    dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1])) + 1;
                }
            }
        }
        return dp[m][n];
    }
};

 

leetcode 72 编辑距离 DP

原文:https://www.cnblogs.com/libin123/p/14675275.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!