Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

a) Insert a character
b) Delete a character
c) Replace a character

题目:将一个字符串转换成另一个字符串,能够执行的操作是插入,删除,替代。每个操作代表一步,求转换的最小步数。

使用动态规划。。。使用一个二维数组dp[i][j]来保存word1的前i个字符转成word的前j个字符所需要的最小步数。这样i,j就用1开始,0作为初始化。

我们来考虑dp[i][j]的计算。将word1的第i个元素表示a,word2的第j个元素表示为b。如果a==b,那么不用操作,进行下个字符遍历,dp[i][j]=dp[i-1][j-1]。如果a!=b,这个时候有三个操作:好好领会。

1、将a变为b。dp[i][j]=dp[i-1][j-1]+1。

2、将b加到a后面,dp[i][j]=dp[i][j-1]+1.//说明前面i个字符可以转成word2的j-1个字符,这时候需要转成j个字符,就得在i个字符后加一个

3、删除a。dp[i][j]=dp[i-1][j]+1.//说明a是多出来的,word1的前i-1个字符就可以转成word2的前j个字符,这里多出来一个只要一步删除就行。

当a.b不相同时,就是取三个步骤的最小值。

dp[i][j]=min(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])+1.

代码:

class Solution {
public int minDistance(String word1, String word2) {
int len1=word1.length();
int len2=word2.length();
//dp[i][j]表示word1的前i个字符转换成word2的前j个字符需要的最小步数。0个字符用于存放初始值
int[][] dp=new int[len1+1][len2+1];
for(int i=0;i<=len1;i++) dp[i][0]=i;//将Word1转成word2的前0个字符,就是删除word1的所有字符,也就是i步操作
for(int j=0;j<=len2;j++) dp[0][j]=j; for(int i=1;i<=len1;i++)
for(int j=1;j<=len2;j++){
if(word1.charAt(i-1)==word2.charAt(j-1)){
dp[i][j]=dp[i-1][j-1];
}else{
dp[i][j]=Math.min(dp[i-1][j-1],Math.min(dp[i-1][j],dp[i][j-1]))+1;
}
} return dp[len1][len2];
}
}

edit distance(编辑距离,两个字符串之间相似性的问题)的更多相关文章

  1. 利用编辑距离(Edit Distance)计算两个字符串的相似度

    利用编辑距离(Edit Distance)计算两个字符串的相似度 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可 ...

  2. ✡ leetcode 161. One Edit Distance 判断两个字符串是否是一步变换 --------- java

    Given two strings S and T, determine if they are both one edit distance apart. 给定两个字符串,判断他们是否是一步变换得到 ...

  3. Edit Distance编辑距离(NM tag)- sam/bam格式解读进阶

    sam格式很精炼,几乎包含了比对的所有信息,我们平常用到的信息很少,但特殊情况下,我们会用到一些较为生僻的信息,关于这些信息sam官方文档的介绍比较精简,直接看估计很难看懂. 今天要介绍的是如何通过b ...

  4. leetCode 72.Edit Distance (编辑距离) 解题思路和方法

    Edit Distance Given two words word1 and word2, find the minimum number of steps required to convert  ...

  5. JS 从一个字符串中截取两个字符串之间的字符串

    /************************************************* 函数说明:从一个字符串中截取 两个字符串之间的字符串 参数说明:src_str 原串, start ...

  6. java string截取两个字符串之间的值

    java string截取两个字符串之间的值 import java.util.regex.Matcher; import java.util.regex.Pattern; public class ...

  7. js截取两个字符串之间的子字符串

    // 截取两个字符串之间的子字符串,返回第一个 function subStringOne(text, begin, end) { var regex; if (end == '\\n') regex ...

  8. js 正则匹配 两个字符串之间,某个字符串之前(之后)的内容

    1.js截取两个字符串之间的内容: var str = "aaabbbcccdddeeefff"; str = str.match(/aaa(\S*)fff/)[1]; alert ...

  9. [LeetCode] Edit Distance 编辑距离

    Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...

随机推荐

  1. 【一天一道LeetCode】#136. Single Number

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...

  2. VS2010创建和调用动态链接库

    当我们开发一个产品的时候,我们并不想把源码公布给对方,除了给对方提供exe可执行文件外,我们还可以生成动态链接库,供程序调用,方便二次开发. 下面我将简单梳理一下如何创建和调用动态链接库,方便大家程序 ...

  3. Java进阶(三十三)java基础-filter

    java基础-filter 我们先看看没有filter的时候,整个web客户端-服务端的一个流程. 接下来我们再看看引入了filter之后的Uml图.尝试分析这两者之间的差别. filter从哪里来? ...

  4. volatile适用场合

    volatile适用场合 要在多线程中安全的适用volatitle变量,必须同时满足:        1.对变量的写入操作不依赖其当前值 不满足:number++.count = count * 5等 ...

  5. R12: Improving Performance of General Ledger and Journal Import (Doc ID 858725.1 )

    In this Document   Purpose   Scope   Details   A) Database Init.ora Parameters   B) Concurrent Progr ...

  6. JAVA之旅(二十)—HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习

    JAVA之旅(二十)-HashSet,自定义存储对象,TreeSet,二叉树,实现Comparator方式排序,TreeSet小练习 我们继续说一下集合框架 Set:元素是无序(存入和取出的顺序不一定 ...

  7. Swift下自定义xib添加到Storyboard

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/51657154 ...

  8. (NO.00002)iOS游戏精灵战争雏形(一)

    原本想做一个复杂点的平面动作游戏,可以觉得还是有点把握不了.还是先从简单的原型开始吧. 构思中的精灵战争(SpriteWar)是一个类似FC时代的小游戏,可以造兵,可以捕获敌兵.原本还想加上保卫老巢的 ...

  9. (NO.00001)iOS游戏SpeedBoy Lite成形记(四)

    下面我们来实现选手从起点开始移动到终点的代码. 首先在GameScene.h接口中添加matchRun方法: #import "CCNode.h" @interface GameS ...

  10. R-- Apply族函数

    APPLY族函数: apply(x,a,f) 对矩阵或数据框的某一维度作用函数fx为矩阵或数据框:a为1代表行,a为2代表列:f为作用函数. lapply(x,f) 对x的每一个元组作用函数f,结果以 ...