最短编辑距离

来源:互联网 发布:杭州摄影俱乐部 知乎 编辑:程序博客网 时间:2024/06/11 14:14
//最短编辑距离 




#include<iostream>
#include<string>
using namespace std;


int minVal(int x, int y, int z){
int min = x<y?x:y;
return min<z?min:z;
}


int editlen(string s1, string s2){
int len1 = s1.length();
int len2 = s2.length();
int** pc = new int*[len1+1];
for(int i=0; i<=len1; ++i){
pc[i] = new int[len2+1];
}

for(int i=0; i<=len1; ++i){
pc[i][0] = i;
}
for(int j=0; j<=len2; ++j){
pc[0][j] = j;
}

for(int i=1; i<=len1; ++i){
for(int j=1; j<=len2; ++j){
if(s1[i-1]==s2[j-1]){
pc[i][j] = pc[i-1][j-1];
}else{
pc[i][j] = minVal(pc[i-1][j], pc[i][j-1], pc[i-1][j-1]) + 1;
}
}
}


for(int i=0; i<=len1; ++i){
for(int j=0; j<=len2; ++j){
cout<<pc[i][j]<<" ";
}
cout<<endl;
}

int eidtLength = pc[len1][len2];

//delete 
for(int i=0; i<=len1; ++i){
delete[] pc[i];
}
delete[] pc;
return eidtLength;
}




int main(){
string s1 = "abcdd";
string s2 = "xxabc";
cout<<"res="<<editlen(s1,s2);

return 0;
}
0 0