zoukankan      html  css  js  c++  java
  • 30 Day Challenge Day 22 | Leetcode 72. Edit Distance

    题解

    Hard

    动态规划

    这道题是一道很具有代表性的二维动态规划问题,非常具有示范效应,理解了这道题的思路,能够举一反三。

    一开始没有思路的时候,用一个小例子手动演算一下很有帮助。

        Example: word1: abc, word2: abbc
                a b b c
              0 1 2 3 4
             a  1 0 1 2 3 
             b  2 1 0 1 2
             c  3 2 1 1 1
             
        DP:
            state: 
                dp[i][j] word1[0-i] --> word2[0-j]
            initialization:
                1st row: dp[0][j] = j;
                1st col: dp[i][0] = i;
            transition:
                case: word1[i-1] == word2[j-1] ==> dp[i][j] = dp[i-1][j-1]
                case: word1[i-1] != word2[j-1] ==> dp[i][j] = min(dp[i][j-1], dp[i-1][j]) + 1  <== missing dp[i-1][j-1]
                                                                    delete      insert                       replace
            result:
                dp[m][n]
        *****/
    
    class Solution {
    public:
        int minDistance(string word1, string word2) {
            int m = word1.size(), n = word2.size();
    
            vector<vector<int>> dp(m+1, vector<int>(n+1, 0));
            
            // initialization
    
            for(int i = 0; i <= m; i++) {
                dp[i][0] = i;
            }
            
            for(int j = 0; j <= n; j++) {
                dp[0][j] = j;   
            }
    
            // state transition
            for(int i = 1; i <= m; i++) {
                for(int j = 1; j <= n; 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];
        }
    };
    
  • 相关阅读:
    day08作业
    day07作业
    day06作业
    day05作业
    OOAD与UML
    大数据(3):基于sogou.500w.utf8数据Hbase和Spark实践
    大数据(2):基于sogou.500w.utf8数据hive的实践
    大数据(1):基于sogou.500w.utf8数据的MapReduce程序设计
    九大排序算法的Java实现
    数字在排序数组中出现的次数
  • 原文地址:https://www.cnblogs.com/casperwin/p/13789854.html
Copyright © 2011-2022 走看看