119. Edit Distance

119. Edit Distance

Tag:

Dynamic Problem

Main Idea:

DP-Match Problem.

  1. State:
    dp[i][j] : the minimum number of steps of converting s1(0,i) to s2(0, j).
  2. Update Function:
    IF s1[i] == s2[j], THEN dp[i][j] = min(dp[i-1][j-1], 1+min(dp[i-1][j], dp[i][j-1]));
    ELSE, dp[i][j] = 1 + min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]).
  3. Initialization:
    1. dp[i][0] =i
    2. dp[0][j] =j
  4. Answer:
    dp[n][m]

Tips/Notes:

Time/Space Cost:

Time Cost:   O ( n m ) \ O(nm)
Space Cost:   O ( n m ) \ O(nm)

Code:

class Solution {
public:
    /**
     * @param word1: A string
     * @param word2: A string
     * @return: The minimum number of steps.
     */
    int minDistance(string &word1, string &word2) {
        // write your code here
        int n = word1.length();
        int m = word2.length();
        
        vector<vector<int>> dp(n+1, vector<int>(m+1, 0));
        
        for(int i = 0; i <= n; i++){
            dp[i][0] = i;
        }
        
        for(int j = 0; j <= m; j++){
            dp[0][j] = j;
        }
        
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                if(word1[i-1] == word2[j-1])
                    dp[i][j] = min(dp[i-1][j-1], 1 + min(dp[i-1][j], dp[i][j-1]));
                    
                else
                    dp[i][j] = 1 + min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1]));
            }
        }
        
        return dp[n][m];
        
    }
};

发布了10 篇原创文章 · 获赞 0 · 访问量 96

猜你喜欢

转载自blog.csdn.net/Zahb44856/article/details/103942843