您的位置:首页 > 其它

字符串编辑距离

2014-08-12 20:23 253 查看
1 /*
2  * 字符串编辑距离
3  * a[i][j]=min(a[i-1][j]+1,a[i][j-1]+1,a[i-1][j-1]+(str1[i-1]==str2[j-1]?0:1)
4  * */
5 #include <iostream>
6 #include <cstring>
7 #include <algorithm>
8 using namespace std;
9
10 int StringEditDistance(const char* str1,const char* str2)
11 {
12     int len1=strlen(str1);
13     int len2=strlen(str2);
14     int** arr=new int*[len1+1];                          //分配二维数组
15     for(int i=0;i<len1+1;++i)
16         arr[i]=new int[len2+1];
17     for(int i=0;i<len1+1;++i)
18         arr[i][0]=i;
19     for(int j=0;j<len2+1;++j)
20         arr[0][j]=j;
21     for(int i=1;i<len1+1;++i)
22         for(int j=1;j<len2+1;++j)
23         {
24             int d=str1[i-1]==str2[j-1]?0:1;              //判断相等时注意索引!!!
25             arr[i][j]=min(min(arr[i-1][j]+1,arr[i][j-1]+1),arr[i-1][j-1]+d);
26         }
27     int distance=arr[len1][len2];
28     for(int i=0;i<len1+1;++i)
29     {
30         for(int j=0;j<len2+1;++j)
31             cout<<arr[i][j]<<' ';
32         cout<<endl;
33     }
34     for(int i=0;i<len1+1;++i)                            //释放分配的二维数组
35         delete[] arr[i];
36     delete[] arr;
37     return distance;
38 }
39
40 int main()
41 {
42     char str1[100];
43     char str2[100];
44     cout<<"请输入字符串1:";
45     cin.getline(str1,100);
46     cout<<"请输入字符串2:";
47     cin.getline(str2,100);
48     cout<<StringEditDistance(str1,str2)<<endl;
49     return 0;
50 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: