美团笔试题之一:求编辑距离
2015-09-20 22:24
218 查看
题目大意:给定一个源字符串src=“string”,然后给定一个目标字符串dst=“strim”,可以通过添加、删除和替换字符使得源字符串转化为目标字符串,比如给的例子中可以将“n"替换成“m”,然后删除“g”,则源字符串转换为目标字符串,源字符串变换为目标字符串时经过的最小动作(添加、删除和替换)数为源字符串到目标字符串的编辑距离,编写程序求出给定源字符串和目标字符串的编辑距离,如例子中的编辑距离为2.
解题的主要思路为:(递归)
分为两种情况:(rsc,dst)
(一)当判断的两个字符相等时(*rsc==*dst),编辑距离为前面的编辑距离加上后面的编辑距离help(rsc++,dst++)的距离;
(二)不相等时分为三种情况:
1,在该位置进行替换元素,编辑距离为1+help(rsc++,dst++);
2,当在该位置添加元素时编辑距离为1+help(rsc,dst++);
3,当在该位置删除一个元素时编辑距离为1+help(rsc++,dst)
具体代码如下:
解题的主要思路为:(递归)
分为两种情况:(rsc,dst)
(一)当判断的两个字符相等时(*rsc==*dst),编辑距离为前面的编辑距离加上后面的编辑距离help(rsc++,dst++)的距离;
(二)不相等时分为三种情况:
1,在该位置进行替换元素,编辑距离为1+help(rsc++,dst++);
2,当在该位置添加元素时编辑距离为1+help(rsc,dst++);
3,当在该位置删除一个元素时编辑距离为1+help(rsc++,dst)
具体代码如下:
#include "stdafx.h" #include<iostream> using namespace std; int compute_lenth(char *src) { int i = 0; while (src[i] != '\0') { i++; } return i; } int help(char*src, char *dst) { if (*src == '\0') return compute_lenth(dst); if (*dst == '\0') return compute_lenth(src); if (*src == *dst) return help(src + 1, dst + 1); else { int temp = 100000; int result = 1000001; result = 1 + help(src + 1, dst + 1); //tihuan if (result < temp) temp = result; //tianjia result = 1 + help(src, dst + 1); if (result < temp) temp = result; result = 1 + help(src + 1, dst);//shanchu if (result < temp) temp = result; return temp; } } int edit_distance(char *src, char *dst) { return help(src, dst); } int _tmain(int argc, _TCHAR* argv[]) { int result = edit_distance("string", "strim"); cout << result << endl; return 0; }注:代码为自己编写,可能会存在问题,如有问题请在评论中指出或邮件告知,谢谢。本代码通过VS2013下编写,并通过了笔试时的所有用例。
相关文章推荐
- 黑盒测试0-1
- 通过链表实现栈的基本操作
- oracle删除表的方法
- Java enum的用法详解
- hibernate单边多对一关联
- 三向字符串快速排序
- cvc-complex-type.3.2.2: 元素 'ref' 中不允许出现属性 'local'
- 如何为编程爱好者设计一款好玩的智能硬件(七)——LCD1602点阵字符型液晶显示模块驱动封装(上)
- 分割字符串
- static关键字
- 《大道至简》第一章读后感
- redis实现网站最新登录用户功能
- Linux常用命令
- 金额小写转大写方法——好用!我一直在用它!
- 运用BufferedWriter把数据写入文件
- 基于网页内容数据采集 PHP开发学习笔记
- 对于Objective-C新建类的理解
- 算法基础(四)---- 计算数组组合最大和
- 爬虫自动更换代理
- 对象之间的关系