[leetcode]Edit Distance

来源:互联网 发布:java系统设计文档 编辑:程序博客网 时间:2024/05/21 08:01

编辑距离问题,典型的动态规划解决的问题。

pMatrix[i][j]表示word1[1..i]与word2[1..j]的编辑距离。有如下递推关系:

pMatrix[i][j]=min{ pMatrix[i-1][j]+1,pMatrix[i][j-1]+1,pMatrix[i-1][j-1]+cost},其中cost决定于word1[i-1]与word2[j-1]是否相等,相等则为0,不等为1。初始化pMatrix[i][0]和pMatrix[0][j]。根据递推关系可得到word1和word2的编辑距离。

代码如下:

class Solution {public:    int minDistance(string word1, string word2) {        int max1=word1.size();        int max2=word2.size();        int **pMatrix=new int*[max1+1];                for(int i=0;i<max1+1;i++)            pMatrix[i]=new int[max2+1];                    for(int i=0;i<max1+1;i++){            pMatrix[i][0]=i;        }                for(int j=0;j<max2+1;j++){            pMatrix[0][j]=j;        }                for(int i=1;i<=max1;i++){            for(int j=1;j<=max2;j++){                int temp=min(pMatrix[i-1][j]+1,pMatrix[i][j-1]+1);                int d;                if(word1[i-1]==(word2[j-1])){                    d=0;                }                else{                    d=1;                }               pMatrix[i][j]=min(pMatrix[i-1][j-1]+d,temp);             }        }                int dis=pMatrix[max1][max2];                for(int i=0;i<max1+1;i++){            delete[] pMatrix[i];            pMatrix[i]=NULL;        }                delete[] pMatrix;        pMatrix=NULL;        return dis;    }};


0 0