最小编辑距离。非常经典的问题。今年微软实习生的笔试有一个这个的扩展版,牵扯到模板之类的,当时一行代码也没写出来。

dp能够非常优雅的解决问题。状态转移方程也非常明白。用pos[i][j]表示word1的前i个字符与word2的前j个字符之间的编辑距离。假设word[i-1]与word[j-1]相等,那pos[i][j]与pos[i-1][j-1]相等,否则的话。依据编辑的几种操作。能够从三种情况中选代替价最小的一种。从word1中删除一个字符?从word2中删除一个字符?改动当中一个?边界也非常easy,一个字符串长度为0时。编辑距离一定是依据还有一个的长度不断添加的。

写成代码一目了然:

class Solution {
public:
int minDistance(string word1, string word2) {
int len1 = word1.length(), len2 = word2.length();
int pos[len1+1][len2+1];
for(int i=0;i<=len1;i++)
pos[i][0] = i;
for(int i=0;i<=len2;i++)
pos[0][i] = i;
for(int i=1;i<=len1;i++){
for(int j=1;j<=len2;j++){
if(word1[i-1] == word2[j-1])
pos[i][j] = pos[i-1][j-1];
else{
pos[i][j] = min(pos[i-1][j], min(pos[i-1][j-1], pos[i][j-1]))+1;
}
}
}
return pos[len1][len2];
}
};

leetcode第一刷_Edit Distance的更多相关文章

  1. leetcode第一刷_Set Matrix Zeroes

    这个题乍一看非常easy,实际上还挺有技巧的.我最開始的想法是找一个特殊值标记.遇到一个0,把他所相应的行列中非零的元素标记成这个特殊值.0值保持不变,然后再从头遍历一次,碰到特殊值就转化成0. 问题 ...

  2. leetcode第一刷_Permutations II

    当有反复元素的时候呢? 不用拍脑袋都会想到一种方法,也是全部有反复元素时的通用处理方法,维护一个set,假设这个元素没增加过就增加,增加过了的忽略掉.可是,在这道题上这个通用方法竟然超时了! 怎么办? ...

  3. leetcode第一刷_Minimum Path Sum

    能够用递归简洁的写出,可是会超时. dp嘛.这个问题须要从后往前算,最右下角的小规模是已知的,边界也非常明显,是最后一行和最后一列,行走方向的限制决定了这些位置的走法是唯一的,能够先算出来.然后不断的 ...

  4. leetcode第一刷_Populating Next Right Pointers in Each Node II

    很自然的推广,假设去掉全然二叉树的条件呢?由于这个条件不是关键,因此不会影响整体的思路.做法依旧是每次找到一层的起点,然后一层一层的走. 假设是全然二叉树的话,每层的起点就是上一层起点的左孩子,兄弟之 ...

  5. leetcode第一刷_Merge Intervals

    看到这个题我就伤心啊,去微软面试的时候,第一个面试官让我做的题目就是实现集合的交操作,这个集合中的元素就像这里的interval一样.是一段一段的.当时写的那叫一个慘不忍睹.最后果然被拒掉了. .好好 ...

  6. leetcode第一刷_N-Queens

    八皇后问题应该是回溯法的教学典范.在本科的时候,有一门课叫面向对象.最后的附录有这个问题的源码.当时根本不懂编程,照抄下来,执行一下出了结果都非常开心,哎. 皇后们的限制条件是不能同行同列,也不能同对 ...

  7. leetcode第一刷_Gray Code

    说到格雷码,应该没人不知道,详细它有什么用,我还真不是非常清楚,我室友应该是专家.生成的规律不是非常明显,之前看到帖子讲的,这会儿找找不到了.. 思想是这种,假设有n位,在第2^(n-1)个编码以下画 ...

  8. leetcode第一刷_Combination Sum Combination Sum II

    啊啊啊啊.好怀念这样的用递归保存路径然后打印出来的题目啊.好久没遇到了. 分了两种,一种是能够反复使用数组中数字的,一种是每一个数字仅仅能用一次的.事实上没有多大差别,第一种每次进入递归的时候都要从头 ...

  9. leetcode第一刷_Count and Say

    水题. 描写叙述的还挺麻烦的,实际上就是纸老虎,用两个string,一个存上一轮的结果,一个用来更新出这一轮的结果,每次扫描上一轮,统计一个字符出现的次数,然后把这个次数和字符增加到这一轮的字符串中就 ...

随机推荐

  1. python基础之函数(自定义函数)

    函数: 函数的定义: 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数. ...

  2. UVALIVE 5096 Volume

    This time your job is to calculate the volume of a special object. The object consists of two orthog ...

  3. Codeforces #107 DIV2 ABCD

    A #include <map> #include <set> #include <list> #include <cmath> #include &l ...

  4. SuSE Linux10.1 网络设置以及和主机通信

    SuSE Linux10.1 网络设置以及和主机通信 http://www.cnblogs.com/kevintian/articles/1086994.html 在VMWare上安装好SuSE之后, ...

  5. Javacore分析(转载)

    本文转自(http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1406_tuzy_javacore/1406_tuz ...

  6. php扩展

    swoole 命令行/php-fpm下实现的 多线程.异步.多种网络协议等 https://wiki.swoole.com/wiki/page/6.html 编译安装, 注意:需命令行运行,作为内部服 ...

  7. js数组高效去重

    http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 这个方法的思路是先把数组排序,然后比较相邻的两个值. 排序的时候用的J ...

  8. 我的一次安装oracle的过程

    1.在装oracle之前,先安装.net3.5 2.然后正常安装oracle,一直next 3.装完oracle后,安装plsql dev工具,打开工具,发现没有connect as,是需要进行一些配 ...

  9. [ Python - 11 ] 多线程及GIL全局锁

    1. GIL是什么? 首先需要明确的一点是GIL并不是python的特性, 它是在实现python解析器(Cpython)时所引入的一个概念. 而Cpython是大部分环境下默认的python执行环境 ...

  10. Python垃圾回收机制:gc模块(zz)

    在Python中,为了解决内存泄露问题,采用了对象引用计数,并基于引用计数实现自动垃圾回收. 由于Python 有了自动垃圾回收功能,就造成了不少初学者误认为不必再受内存泄漏的骚扰了.但如果仔细查看一 ...