您的位置:首页 > 编程语言

编程练习

2016-04-01 17:55 281 查看
// test.cpp : 定义控制台应用程序的入口点。

//

#include<iostream>

#include <vector>

#include <string>

using namespace std;

//-----------------动态规划编辑距离问题-------------------------------------------------------------------

int min(int a, int b, int c) {

int tmp = a > b ? b : a;

return tmp > c ? c : tmp;

}

int edit(string str1, string str2) {

int max1 = str1.size();

int max2 = str2.size();

int **result = new int*[max1 + 1];

for (int i = 0; i < max1 + 1; i++) {

result[i] = new int[max2 + 1];

}

for (int i = 0; i < max1 + 1; i++) {

result[i][0] = i;

}

for (int i = 0; i < max2 + 1; i++) {

result[0][i] = i;

}

for (int i = 1; i < max1 + 1; i++) {

for (int j = 1; j < max2 + 1; j++) {

int distance;

if (str1[i - 1] == str2[j - 1])

distance = 0;

else

distance = 1;

result[i][j] = min(result[i - 1][j] + 1, result[i][j - 1]+1, result[i - 1][j - 1] + distance);

}

}

for (int i = 0; i < max1+1; i++) {

for (int j = 0; j < max2 + 1; j++) {

cout << result[i][j] << " ";

}

cout << endl;

}

return result[max1][max2];

}

int main() {

string str1 = "sailn";

string str2 = "failing";

int result = edit(str1, str2);

cout << result << endl;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: