编程练习
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;
}
//
#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;
}
相关文章推荐
- java学习第五天
- C++作业2
- PHP安全过滤函数
- C++ 指针(任何一个指针本身的类型都是unsigned long int型)
- C、C++运算符优先级列表
- Delphi中编写无输出函数名的DLL文件(有点意思)(400多篇博客)
- Java高级之1.5之后atomic包
- C++ new 用法
- Java入门到精通——调错篇之Eclipse No Java virtual machine was found after searching the following locations
- C++ 二义性问题
- python 多线程
- C++ 类的聚集和浅拷贝与深拷贝
- [Java学习] Expression Add Operators 添加运算符
- A Byte of Python 笔记(9) 面向对象编程
- 离线在Eclipse上安装ADT
- 使用matlab时出现Out of memory问题的解决
- [Java学习] Iterator, foreach, generics and callback in Java, C# and Python
- 建立一个简单的SpringMvc程序
- 用Condition条件变量实现生产者消费者模式
- c++ struct queue malloc问题