原题链接:https://leetcode.com/problems/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
题意大概就是给定两个字符串,然后找出能够从第一个字符串转化为第二个字符串的最小操作步骤,而这道题要求总共有三种操作,插入、删除和替换。
这道题入手时最先想到的就是动态规划的方法,但一直没想到动态规划的方程,后来从字符串长度为1开始慢慢递推,就有了如下方程
以下是源代码:
class Solution {
public:
int minDistance(string word1, string word2) {
int e[1000][1000];
int n = word1.length();
int m = word2.length();
for (int i = 1; i <= n; i++) e[i][0] = i;
for (int j = 1; j <= m; j++) e[0][j] = j;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
int diff = (word1[i-1] == word2[j-1])?0:1;
e[i][j] = min(e[i - 1][j - 1] + diff, min(e[i][j - 1] + 1, e[i - 1][j] + 1));
}
}
return e[n][m];
}
};