C/C++笔试准备(2)
问题:编辑距离,是指将一个字符串变为另一个字符串,仅可以3种操作:修改一个字符,删除一个字符,插入一个字符。the变成that:删除e,插入a,插入t。20’
实现编辑距离算法。
解算:利用动态规划的思想,将问题分解为各个子问题,解决子问题从而得到最终的答案。
思路如下:
字符串S1和S2
S1和S2的编辑距离的子问题为S1的任意子字符串到S2的任意子字符串的编辑距离。。。。。。
从而,S1到S2的编辑距离可以存储(len1+1)*(len2+1)大小的矩阵中
当S1、S2都为空时,编辑距离(editDistance)为0;
当S1、S2中有一个为空时,编辑距离明显为不为空的字符串的长度;
当S1、S2都不为空时,editDistance(S1,S2)可以看做是在其前一步的决策后增加了一步操作,其前一步的编辑距离主要来自三个方向:(S1[1:len1-1]、S2)、(S1[len1]、S2[1:len2-1])、(S1[1:len1-1]、S2[1:len2-1])
其中(S1[1:len1-1]、S2[1:len2-1])操作比较特殊,如果比较的当前值相等,就不需要操作了,不相等就操作+1。因此editDistance(S1,S2) = min(1,2,3)中情况中最小值。
具体代码如下:参考:http://blog.csdn.net/yysdsyl/article/details/4249245
int min(int a,int b,int c)
{
int t = a<b?a:b;
return t<c?t:c;
} void editDistance(char s1[],char s2[])
{
int len1 = strlen(s1);
int len2 = strlen(s2); int **d = new int*[len1+];
for(int k = ;k<=len1;k++)
d[k] = new int[len2+];
int i,j;
for(i = ;i<=len1;i++)
d[i][] = i;
for(j = ;j<=len2;j++)
d[][j] = j;
for(i = ;i<=len1;i++)
{
for(j = ;j<=len2;j++)
{
int cost = s1[i-] == s2[j-]?:;
int deletion = d[i-][j] + ;
int insertion = d[i][j-] +;
int substitution = d[i-][j-] + cost;
d[i][j] = min(deletion,insertion,substitution);
printf("%3d",d[i][j]);
}
printf("\n");
}
printf("%d\n",d[len1][len2]);
for(int k = ;k<=len1;k++)
delete[] d[k];
delete[] d;
} int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv); char s1[] = "fxpium";
char s2[] = "xwrs";
editDistance(s1,s2); return a.exec();
}
C/C++笔试准备(2)的更多相关文章
- C++常见笔试面试要点以及常见问题
1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...
- 2016网易春招Java在线笔试回忆录
别看是在线笔试,但是非常严格,全称窗口不得最小化和关闭,转移,全称需要打开摄像头监控,使用草稿纸需要摄像头对准……反正2个小时,题量在那儿摆着,有作弊的功夫不如好好做做最后的编程题呢……网易不让泄漏原 ...
- BAT及各大互联网公司2014前端笔试面试题--Html,Css篇
很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正 ...
- BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习js更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正确, ...
- IT求职中,笔试、面试的算法准备
PS:此文章为转载,源地址:http://www.newsmth.net/nForum/#!article/CoderInterview/849 作者应该是在美国进行的笔试面试,感觉面试的的公 ...
- # C/C++的笔试题目
p,li { white-space: pre-wrap } # C/C++的笔试题目 + include<> 和include"" 的区别 + sizeof操作符与字 ...
- 技术渣如狗,面试虐成猴——本科楼主UC笔试加处女一面全纪录
背景——楼主为广州某校小本一枚,学习成绩渣(班里排名几乎倒数),技术基础渣(算是会敲代码,但很多计算机网络.操作系统的知识都只有模糊的印象).在舍友的鼓励下,收到广州UC的面试通知后,勇敢来到公司直面 ...
- DP - tencent2016实习生笔试A
tencent2016实习生笔试A Problem's Link ------------------------------------------------------------------- ...
- dp - 2016腾讯笔试 A
2016腾讯笔试 A Problem's Link -------------------------------------------------------------------------- ...
- 各大IT公司校园招聘程序猿笔试、面试题集锦
转自:http://blog.csdn.net/hackbuteer1/article/details/7959921#t4 百度一面 1.给定一个字符串比如“abcdef”,要求写个函数编程“def ...
随机推荐
- java开发webservice的几种方式
webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2 Axis是apache下一个开源的webservice开发组件 ...
- 使用VisualVM查看Java Heap Dump
浏览Heap Dump 可以使用VisualVM浏览heap dump文件的内容,从而快速查看在堆中分配的对象.Heap dumps在主窗口的heap dump子标签页中显示.你可以打开保存在本地的h ...
- DOS环境下MySQL使用及不同字符集之间的转换
mysql -uroot -p; show databses; 创建数据库\c; create database webclass; use webclass; 创建表并设置好各字段的属性\c cre ...
- input事件以及中文输入法的处理
在项目的开发过程中,相信大家都处理过监听用户输入的事情,一般我们会用到onkeyup.onkeydown.onkeypress.onchange.oninput事件,虽然都很熟悉了,但是还是有必要巩固 ...
- Android -------- 序列化器生成xml文件
- uva 10260 - Soundex
题目:编码翻译,有些字母有对应的数字,有的没有,如果连续对应的数字相同只输出一个. #include <iostream> #include <cstdlib> #includ ...
- 兄弟选择器 E + F
兄弟选择器在IE7下支持会有bug,特记于此 如果兄弟选择器有Html注释,兄弟选择器在IE7下会失效 代码如下 E + Fp + p{color:red} <p class="te ...
- 一步步教你css3手风琴效果的实现
什么是手风琴效果? 首先我们先来看一段动画,如下图所示: 在上面动画中,我们不难发现,一排照片正常排列,当我鼠标移上(:hover)时,照片会变大显示并且把其它照片挤小.那么在鼠标来回移动的过程中,画 ...
- unexpected problem
一个比较有趣的字符串问题,问题描述如下 大体意思就是给定一个字符串s以及一个整数m,找出一个能满足以上三个条件的字符串t的个数对10e9 + 7 取余输出. 第二三条是关键,t.s = s.t 举个例 ...
- VMware vSphere 6 Enterprise Plus License
Product: VMware vSphere 6 Enterprise Plus Licensed for 2 physical CPUs (unlimited cores per CPU) Lic ...