Edit Distance

来源:互联网 发布:spss数据统计与分析pdf 编辑:程序博客网 时间:2024/06/10 17:15

用动态规划求解这一点应该是毫无疑问的,但是递推公式实在是太蛋疼了

EDIT[i,j] = min( EDIT[i - 1,j] + 1, EDIT[i,j - 1] + 1, EDIT[i-1, j - 1] + f(x[i],y[j]))

EDIT[i,j]表示对于字符串a从1到i的子串和字符串b从1到j的字串的编辑距离。(字符串下标从1开始)

EDIT[i - 1,j] + 1表示对a 在i 位置删除delete操作

EDIT[i,j - 1] + 1 表示insert添加操作

EDIT[i-1, j - 1] + f(x[i],y[j])这里如果x[i] == y[j] 则 f(x[i],y[j]) == 0 否则 ==1,等于0表示不用进行替换操作,否则等于1表示需要进行替换操作

如果还是看不懂这个蛋疼的递推公式的话,可以参考我的另一篇博文:点击打开链接


class Solution {public:int minDistance(string word1, string word2) {int row = word1.length() + 1;int col = word2.length() + 1;vector<vector<int> > edit(row, vector<int>(col));for (int i = 0; i < row; i++)edit[i][0] = i;for (int i = 0; i < col; i++)edit[0][i] = i;for (int i = 1; i < row; i++)for (int j = 1; j < col; j++) {if (word1[i - 1] == word2[j - 1])edit[i][j] = edit[i - 1][j - 1];elseedit[i][j] = edit[i - 1][j - 1] + 1;edit[i][j] = min(edit[i][j], min(edit[i - 1][j] + 1, edit[i][j - 1] + 1));}return edit[row - 1][col - 1];}};


0 0