- 算法说明
由小规模到大规模,每次都有三种情况,分别进行处理
- 源代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
#define maxn 101
#define minE(a, b) (a) > (b) ? (b) : (a)
int e[maxn][maxn], diff[maxn][maxn];
string x, y;
int main() {
freopen("5.editDistance.txt", "r", stdin);
memset(e, 0, sizeof(e));
cin >> x >> y;
int lenX = x.length();
int lenY = y.length();
for(int i = 0; i <= lenX; i++) e[i][0] = i;
for(int j = 0; j <= lenY; j++) e[0][j] = j;
for(int i = 0; i < lenX; i++) {
for(int j = 0; j < lenY; j++) {
if(x[i] == y[j]) diff[i][j] = 0;
else diff[i][j] = 1;
}
}
for(int i = 1; i <= lenX; i++) {
for(int j = 1; j <= lenY; j++) {
e[i][j] = minE(minE(e[i-1][j] + 1, e[i][j-1] + 1), e[i-1][j-1] + diff[i-1][j-1]);
}
}
for(int i = 0; i <= lenX; i++) {
for(int j = 0; j <= lenY; j++) {
printf("%-3d", e[i][j]);
}
printf("\n");
}
printf("%d", e[lenX][lenY]);
return 0;
}
- 输入数据
- 运行结果