#include <iostream>
#include <string>
#define min(a,b) ((a)>(b))?(b):(a)
using namespace std;
int mindistance(string& a, string& b){
int n = a.length();
int m = b.length();
int**dp;
dp = new int*[n+1];
for (int i = 0; i <= n; ++i)
dp[i] = new int[m + 1];
dp[0][0] = 0;
for (int i = 1; i <= n; ++i)
dp[i][0] = i;
for (int j = 1; j <= m; ++j)
dp[0][j] = j;
int temp;
for (int i = 1; i <= n; ++i){
for (int j = 1; j <= m; ++j){
temp = min(dp[i - 1][j] + 1, dp[i][j - 1] + 1);
if (a[i-1] == b[j-1])
dp[i][j] = min(temp, dp[i - 1][j - 1]);
else
dp[i][j] = min(temp, dp[i - 1][j - 1] + 2);
}
}
int ret = dp[n][m];
/*for (int i = 0; i <= n; ++i){
for (int j = 0; j <= m; ++j){
printf("%4d ", dp[i][j]);
}
printf("\n");
}*/
for (int i = 0; i <= n; ++i)
delete[] dp[i];
delete[] dp;
return ret;
}
int main()
{
string a = "abc";
string b = "acbfbcd";
int ret = mindistance(a, b);
cout << ret << endl;
system("PAUSE");
return 0;
}
参考文献:
原理篇:http://blog.csdn.net/huaweidong2011/article/details/7727482
C代码实现篇:http://blog.csdn.net/abcjennifer/article/details/7735272