72. 编辑距离

困难 · 动态规划

题目

72. 编辑距离

官方题解

AcWing题解

动态规划

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
    int f[510][510];

    int minDistance(string word1, string word2) {
        // 初始化
        int n1 = word1.size(), n2 = word2.size();
        for (int i = 0; i <= n1; i ++) {
            f[i][0] = i;
        }
        for (int i = 0; i <= n2; i ++) {
            f[0][i] = i;
        }

        for (int i = 1; i <= n1; i ++) {
            for (int j = 1; j <= n2; j ++) {
                f[i][j] = min(f[i][j - 1] + 1, f[i - 1][j] + 1);
                f[i][j] = min(f[i][j], f[i - 1][j -1] + (word1[i - 1] != word2[j - 1]));
            }
        }

        return f[n1][n2];
    }
};

时间复杂度:O(mn),其中 m 和 n 分别是字符串 word1 和 word2 的长度。我们需要计算并存储一个大小为 m×n 的二维数组 f。 空间复杂度:O(mn),即为存储二维数组 f 需要的空间。