Edit Distance

来源:互联网 发布:java io importnew 编辑:程序博客网 时间:2024/04/27 02:47

1.对于f[i][j]可以由三种状态而来,即

    f[i-1][j-1]:修改word1[i]=word2[j]

    f[i-1][j]:   删除word2[j]或者插入word1[i]

    f[i][j-1]:   删除word1[i]或者插入word2[j]

2.状态方程如下 

 

3.例如,对于字符串abcd 和acbd,填表如下

 

 

class Solution {public:    int minDistance(string word1, string word2) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        int len1=word1.length(),len2=word2.length(),i,j;        if(len1==0)return len2;        if(len2==0)return len1;        vector<int> row(len2+1,0);        vector<vector<int>> f(len1+1,row);        for(i=0;i<=len1;++i){            f[i][0]=i;        }        for(i=0;i<=len2;++i){            f[0][i]=i;        }        for(i=1;i<=len1;++i){            for(j=1;j<=len2;++j){                if(word1[i-1]==word2[j-1]){                    f[i][j]=f[i-1][j-1];                }else{                    //          replace         delete or insert                    f[i][j]=min(f[i-1][j-1],min(f[i-1][j],f[i][j-1]))+1;                }            }        }        return f[len1][len2];    }};