Thursday, July 9, 2015

Leetcode 72: edit distance

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character

二维dp, 其实这题可以将空间复杂度降到O(n), 因为递推式中,每一行的值只与前一行的值有关,可以用一个两个array 存储两行的值。 
class Solution {
public:
    int minDistance(string word1, string word2) {
        //sanity check
        if (word1.size() == 0 && word2.size() == 0) return 0;
        int dp[word1.size()+1][word2.size()+1];
        //base case
        for (int i = 0; i < word1.size()+1; i++) {
            dp[i][0] = i;
        }
        for (int i = 0; i < word2.size()+1; i++) {
            dp[0][i] = i;
        }
        //induction rule
        for (int i = 1; i < word1.size()+1; i++) {
            for (int j = 1; j < word2.size()+1; j++) {
                if (word1[i-1] == word2[j-1]) dp[i][j] = dp[i-1][j-1];
                else {
                    dp[i][j] = min(min(dp[i-1][j-1], dp[i][j-1]), dp[i-1][j]) + 1;
                }
            }
        }
        return dp[word1.size()][word2.size()];
    }
};

No comments:

Post a Comment