1. /**
  2. * Source : https://oj.leetcode.com/problems/edit-distance/
  3. *
  4. *
  5. * Given two words word1 and word2, find the minimum number of steps required to
  6. * convert word1 to word2. (each operation is counted as 1 step.)
  7. *
  8. * You have the following 3 operations permitted on a word:
  9. *
  10. * a) Insert a character
  11. * b) Delete a character
  12. * c) Replace a character
  13. */
  14. public class EditDistance {
  15. /**
  16. * 计算出从一个单词变到另一个单词的最少步数,也就是最短距离,只能使用插入、删除、替换操作
  17. *
  18. * 考虑两个单词abc,bbcd,dp[i][j]表示word1的前i个字符变到word2的前j个字符,所需要的步数,""表示空串
  19. * "" a b c
  20. * "" 0 1 2 3
  21. * b 1 1 1 2
  22. * b 1 1 1 2
  23. * c 3 3 2 1
  24. * d 4 4 3 2
  25. *
  26. * 从上面的演算可以看出
  27. * 当word1[i] == word2[j]的时候,dp[i][j] = dp[i-1][j-1]
  28. * 当word1[i] != word2[j]的时候,dp[i][j] = 其左边、左上方、正上方三个数字中最小的那一个加1
  29. *
  30. *
  31. * @param word1
  32. * @param word2
  33. * @return
  34. */
  35. public int minimumDistance (String word1, String word2) {
  36. if (word1.length() == 0) {
  37. return word2.length();
  38. }
  39. if (word2.length() == 0) {
  40. return word1.length();
  41. }
  42. int[][] dp = new int[word1.length() + 1][word2.length() + 1];
  43. for (int i = 0; i <= word1.length(); i++) {
  44. dp[i][0] = i;
  45. }
  46. for (int i = 0; i <= word2.length(); i++) {
  47. dp[0][i] = i;
  48. }
  49. for (int i = 1; i <= word1.length(); i++) {
  50. for (int j = 1; j <= word2.length(); j++) {
  51. if (word1.charAt(i-1) == word2.charAt(j-1)) {
  52. dp[i][j] = dp[i-1][j-1];
  53. } else {
  54. dp[i][j] = Math.min(Math.min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) + 1;
  55. }
  56. }
  57. }
  58. return dp[word1.length()][word2.length()];
  59. }
  60. public static void main(String[] args) {
  61. EditDistance editDistance = new EditDistance();
  62. System.out.println(editDistance.minimumDistance("", "abc"));
  63. System.out.println(editDistance.minimumDistance("b", "abc"));
  64. System.out.println(editDistance.minimumDistance("bb", "abc"));
  65. System.out.println(editDistance.minimumDistance("bbc", "abc"));
  66. System.out.println(editDistance.minimumDistance("bbcd", "abc"));
  67. }
  68. }

leetcode — edit-distance的更多相关文章

  1. [LeetCode] Edit Distance 编辑距离

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

  2. Leetcode:Edit Distance 解题报告

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

  3. [leetcode]Edit Distance @ Python

    原题地址:https://oj.leetcode.com/problems/edit-distance/ 题意: Given two words word1 and word2, find the m ...

  4. [LeetCode] Edit Distance 字符串变换为另一字符串动态规划

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

  5. Leetcode Edit Distance

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

  6. [LeetCode] Edit Distance(很好的DP)

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

  7. LeetCode: Edit Distance && 子序列题集

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

  8. LeetCode——Edit Distance

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

  9. [LeetCode] One Edit Distance 一个编辑距离

    Given two strings S and T, determine if they are both one edit distance apart. 这道题是之前那道Edit Distance ...

  10. Java for LeetCode 072 Edit Distance【HARD】

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

随机推荐

  1. vue中的axios封装

    import axios from 'axios'; import { Message } from 'element-ui'; axios.defaults.timeout = 5000;axios ...

  2. mac下crontab定时任务使用

    这篇文章的作用 BREAK TIME 本地pc配置定时任务,开机后每隔一小时执行一次,open这个页面,休息半分钟 cron创建备忘 首先创建定时任务 crontab -e 0 */ * * * op ...

  3. Codeforces Codeforces Round #484 (Div. 2) E. Billiard

    Codeforces Codeforces Round #484 (Div. 2) E. Billiard 题目连接: http://codeforces.com/contest/982/proble ...

  4. POJ2248-Addition Chains

    满足如下条件的序列被称为加成序列: X[1]=1,X[m]=n,X[1]<X[2]<......<X[m-1]<X[n] 对于每个k(2<=k<=m)都存在两个整数 ...

  5. 虚拟机安装+配置federa

    安装 安装好后发现鼠标卡卡的,在虚拟机的显示设置里面启用3D加速: 配置 查看 显卡信息:lspci |grep VGA 测试显卡驱动:glxgears 安装必要软件 安装右键打开终端:sudo yu ...

  6. 最近一个dish项目的建设思考

    系统通用能力的沉淀:a.核心模型的数据沉淀 b.通用服务能力的沉淀 ps1:以前重心主要放在了业务的抽象和通过设计模式来增加可复用的扩展性.局限在于,抽象的范围会被单个业务或者当前的业务所束缚,在更大 ...

  7. 背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri

    [源码下载] 背水一战 Windows 10 (98) - 关联启动: 使用外部程序打开一个文件, 使用外部程序打开一个 Uri 作者:webabcd 介绍背水一战 Windows 10 之 关联启动 ...

  8. Chrome部分站点无法启用Flash问题

    ## 69.0之前 ## 1. 打开 chrome://settings/content/flash 2. 禁止网站运行Flash -> 改为“先询问(推荐)” 3. 允许->添加 4. ...

  9. [转] 如何用kaldi训练好的模型做特定任务的在线识别

    转自:http://blog.csdn.net/inger_h/article/details/52789339 在已经训练好模型的情况下,需要针对一个新任务做在线识别应该怎么做呢? 一种情况是,用已 ...

  10. Java的简单类型不能够精确的对浮点数进行运算

    由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精确的浮点数运算,包括加减乘除和四舍五入. import java.math.BigDecimal; /** * 由于Java的简单类 ...