zoukankan      html  css  js  c++  java
  • leetcode 72 编辑距离 DP

    放一个精选题解

    一定要考虑边界情况,二者均为空的情况,以及学习这种递推式的设计(到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];
        }
    };
    每天进步一点点~
  • 相关阅读:
    http
    VUE-1
    AJAX
    html常用标签
    CSS网页布局
    概念整理3
    SEO
    概念整理2
    var
    概念整理
  • 原文地址:https://www.cnblogs.com/libin123/p/14675275.html
Copyright © 2011-2022 走看看