Edit Distance

来源:互联网 发布:广州php培训哪家好 编辑:程序博客网 时间:2024/04/29 02:29

现在觉得看懂了,但是几天后要是再做的话,还是不会,一定要学会dp

class Solution {public:    int minDistance(string word1, string word2) {       vector<vector<int>>f(word1.size()+1,vector<int>(word2.size()+1));       for(int i=0;i<word1.size()+1;i++)            f[i][0]=i;        for(int i=0;i<word2.size()+1;i++)            f[0][i]=i;        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])                    f[i][j]=f[i-1][j-1];                 else                    f[i][j]=f[i-1][j-1]+1;                 f[i][j]=min(f[i][j],min(f[i][j-1]+1,f[i-1][j]+1));            }        return f[word1.size()][word2.size()];    }};
题解

典型的动态规划问题。

image

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 0
原创粉丝点击