编辑距离问题,典型的动态规划解决的问题。
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;
}
};