[LeetCode] 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

class Solution {
public:

    int min3(int a, int b, int c) {
        return min(min(a,b), c);
    }
    int get_dp(int i, int j) {
        if (i == 0 || j == 0) return max(i, j);
        return dp[i%2][j];
    }
    int dp[2][100000];
    
    int minDistance(string word1, string word2) {
        memset(dp, 0, sizeof(dp));
        int l1 = word1.size(), l2 = word2.size();
        
        for (int i = 1; i <= l1; i++) {
            for (int j = 1; j <= l2; j++) {
                if (word1[i-1] == word2[j-1]) dp[i%2][j] = get_dp(i-1,j-1);
                else {
                    dp[i%2][j] = min3(get_dp(i-1,j-1), get_dp(i-1,j), get_dp(i,j-1)) + 1;
                }
            }
        }
        return get_dp(l1,l2);
    }
};

猜你喜欢

转载自cozilla.iteye.com/blog/1859716