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

You have the following 3 operations permitted on a word:

  1. Insert a character
  2. Delete a character
  3. Replace a character

题意:

给定两个串串: word1, word2;  找出word1变身成word2的最小步数的操作(仅限插入、删除和替换这三种操作)

思路:

动态规划的高频题,需要熟练掌握。

字符串生成子序列或者字符串的匹配问题,要巴普诺夫条件反射想到dp。

开一个2D array, dp[word1.length() + 1 ][ word2.length() + 1]

      word2 = 0  r o s

         0   0   

word1 =  h

         o

         r

         s

         e

用dp[i][j]来记录当前word1变身成word2的最小步数

1.    若word1.charAt(i-1) == word2.charAt(j-1) 【留心字符串的index和2D array的坐标有差,这里很容易误写成word1.charAt(i) == word2.charAt(j) 】

  dp[i][j] = dp[i-1][j-1]

  即若当前word1串串和word2串串的当前字符相同,则不需要做任何convert操作,直接将之前dp[i-1][j-1] 结果拿过来

2.    若word1.charAt(i-1) == word2.charAt(j-1)

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

即若当前word1串串和word2串串的当前字符不同, 则

要么word1插入 word2当前的字符, dp[i][j] = dp[i][j-1] + 1

  要么word1删除 word1当前的字符, dp[i][j] = dp[i-1][j] + 1

要么word1替换 word2当前的字符, dp[i][j] = dp[i-1][j-1] + 1

取以上三个操作中最小的步数

代码:

 class Solution {
public int minDistance(String s1, String s2) {
int[][]dp = new int[s2.length() + 1][s1.length() + 1];
dp[0][0] = 0;
for(int i = 1; i<=s2.length(); i++){
dp[i][0] = i;
}
for(int j = 1; j<=s1.length(); j++){
dp[0][j] = j;
}
for(int i = 1; i<=s2.length(); i++){
for(int j = 1; j<=s1.length(); j++){
if( s1.charAt(j-1) == s2.charAt(i-1) ){
dp[i][j] = dp[i-1][j-1];
}else{
dp[i][j] = Math.min(dp[i-1][j-1], Math.min(dp[i][j-1] , dp[i-1][j] )) + 1 ;
}
}
}
return dp[s2.length()][s1.length()];
}
}

[leetcode]72. Edit Distance 最少编辑步数的更多相关文章

  1. [LeetCode] 72. Edit Distance 编辑距离

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

  2. [LeetCode] 72. Edit Distance(最短编辑距离)

    传送门 Description Given two words word1 and word2, find the minimum number of steps required to conver ...

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

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

  4. [leetcode] 72. Edit Distance (hard)

    原题 dp 利用二维数组dp[i][j]存储状态: 从字符串A的0~i位子字符串 到 字符串B的0~j位子字符串,最少需要几步.(每一次删增改都算1步) 所以可得边界状态dp[i][0]=i,dp[0 ...

  5. 第十八周 Leetcode 72. Edit Distance(HARD) O(N^2)DP

    Leetcode72 看起来比较棘手的一道题(列DP方程还是要大胆猜想..) DP方程该怎么列呢? dp[i][j]表示字符串a[0....i-1]转化为b[0....j-1]的最少距离 转移方程分三 ...

  6. LeetCode - 72. Edit Distance

    最小编辑距离,动态规划经典题. Given two words word1 and word2, find the minimum number of steps required to conver ...

  7. 【Leetcode】72 Edit Distance

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

  8. 刷题72. Edit Distance

    一.题目说明 题目72. Edit Distance,计算将word1转换为word2最少需要的操作.操作包含:插入一个字符,删除一个字符,替换一个字符.本题难度为Hard! 二.我的解答 这个题目一 ...

  9. [Leetcode Week8]Edit Distance

    Edit Distance 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/edit-distance/description/ Description ...

随机推荐

  1. java android 捕获未处理异常

    1. 定义一个异常处理类 public class ExceptionHandler implements Thread.UncaughtExceptionHandler { public Excep ...

  2. Entity Framework教程翻译 ---- 系列教程

    Entity Framework教程(第二版) (翻译)Entity Framework技巧系列之十四 - Tip 56 (翻译)Entity Framework技巧系列之十三 - Tip 51 - ...

  3. python中的copy.copy和copy.deepcopy

    一个例子就搞清楚 import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 ...

  4. Vue 表单校验 vee-validate

    gitHub 地址:https://github.com/baianat/vee-validate 官网API 地址:https://baianat.github.io/vee-validate/ap ...

  5. 1.1.17 Word在表格中插入竖排文字,显示一半

    隐藏效果如下所示: 这是因为文字的[段落行距]设置为[固定值],将文字选中,设置为[单倍行距]即可.

  6. DevExpress GridView 整理(转)

    DevExpress GridView 那些事儿 1:去除 GridView 头上的 "Drag a column header here to group by that column&q ...

  7. kafka原理和实践(五)spring-kafka配置详解

    系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...

  8. ueditor的简单用法

    先粘贴未使用ueditor之前的代码: <body> <label for="input_content">作答区:</label> <t ...

  9. Django2.0资料

    The Django Book 2.0 中文版:点击下载 Django课件和代码:点击下载

  10. VS在.NETFramework升级时遇到类库冲突如何解决

    相信大家在开发环境中随着程序的不断升级,很多时间需要升级. NETFramework版本.今天项目中遇到的问题是从. NETFramework4.0升级到4.5时提示 Entityframework. ...