• 代码随想录-算法训练营day55【动态规划16:两个字符串的删除操作、编辑距离、编辑距离总结篇】


    代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客

    1. 第九章 动态规划part16
    2. ● 583. 两个字符串的删除操作
    3. ● 72. 编辑距离
    4. ● 编辑距离总结篇
    5. 详细布置
    6. 583. 两个字符串的删除操作
    7. 本题和动态规划:115.不同的子序列 相比,其实就是两个字符串都可以删除了,情况虽说复杂一些,但整体思路是不变的。
    8. https://programmercarl.com/0583.%E4%B8%A4%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%88%A0%E9%99%A4%E6%93%8D%E4%BD%9C.html
    9. 72. 编辑距离
    10. 最终我们迎来了编辑距离这道题目,之前安排题目都是为了 编辑距离做铺垫。
    11. https://programmercarl.com/0072.%E7%BC%96%E8%BE%91%E8%B7%9D%E7%A6%BB.html
    12. 编辑距离总结篇
    13. 做一个总结吧
    14. https://programmercarl.com/%E4%B8%BA%E4%BA%86%E7%BB%9D%E6%9D%80%E7%BC%96%E8%BE%91%E8%B7%9D%E7%A6%BB%EF%BC%8C%E5%8D%A1%E5%B0%94%E5%81%9A%E4%BA%86%E4%B8%89%E6%AD%A5%E9%93%BA%E5%9E%AB.html
    15. 往日任务
    16. ● day 1 任务以及具体安排:https://docs.qq.com/doc/DUG9UR2ZUc3BjRUdY
    17. ● day 2 任务以及具体安排:https://docs.qq.com/doc/DUGRwWXNOVEpyaVpG
    18. ● day 3 任务以及具体安排:https://docs.qq.com/doc/DUGdqYWNYeGhlaVR6
    19. ● day 4 任务以及具体安排:https://docs.qq.com/doc/DUFNjYUxYRHRVWklp
    20. ● day 5 周日休息
    21. ● day 6 任务以及具体安排:https://docs.qq.com/doc/DUEtFSGdreWRuR2p4
    22. ● day 7 任务以及具体安排:https://docs.qq.com/doc/DUElCb1NyTVpXa0Jj
    23. ● day 8 任务以及具体安排:https://docs.qq.com/doc/DUGdsY2JFaFhDRVZH
    24. ● day 9 任务以及具体安排:https://docs.qq.com/doc/DUHVXSnZNaXpVUHN4
    25. ● day 10 任务以及具体安排:https://docs.qq.com/doc/DUElqeHh3cndDbW1Q
    26. ●day 11 任务以及具体安排:https://docs.qq.com/doc/DUHh6UE5hUUZOZUd0
    27. ●day 12 周日休息
    28. ●day 13 任务以及具体安排:https://docs.qq.com/doc/DUHNpa3F4b2dMUWJ3
    29. ●day 14 任务以及具体安排:https://docs.qq.com/doc/DUHRtdXZZSWFkeGdE
    30. ●day 15 任务以及具体安排:https://docs.qq.com/doc/DUHN0ZVJuRmVYeWNv
    31. ●day 16 任务以及具体安排:https://docs.qq.com/doc/DUHBQRm1aSWR4T2NK
    32. ●day 17 任务以及具体安排:https://docs.qq.com/doc/DUFpXY3hBZkpabWFY
    33. ●day 18 任务以及具体安排:https://docs.qq.com/doc/DUFFiVHl3YVlReVlr
    34. ●day 19 周日休息
    35. ●day 20 任务以及具体安排:https://docs.qq.com/doc/DUGFRU2V6Z1F4alBH
    36. ●day 21 任务以及具体安排:https://docs.qq.com/doc/DUHl2SGNvZmxqZm1X
    37. ●day 22 任务以及具体安排:https://docs.qq.com/doc/DUHplVUp5YnN1bnBL
    38. ●day 23 任务以及具体安排:https://docs.qq.com/doc/DUFBUQmxpQU1pa29C
    39. ●day 24 任务以及具体安排:https://docs.qq.com/doc/DUEhsb0pUUm1WT2NP
    40. ●day 25 任务以及具体安排:https://docs.qq.com/doc/DUExTYXVzU1BiU2Zl
    41. ●day 26 休息
    42. ●day 27 任务以及具体安排:https://docs.qq.com/doc/DUElpbnNUR3hIbXlY
    43. ●day 28 任务以及具体安排:https://docs.qq.com/doc/DUG1yVHdlWEdNYlhZ
    44. ●day 29 任务以及具体安排:https://docs.qq.com/doc/DUHZYbWhwSHRCRmp3
    45. ●day 30 任务以及具体安排:https://docs.qq.com/doc/DUEdTVVhxbnJiY3BR
    46. ●day 31 任务以及具体安排:https://docs.qq.com/doc/DUG1PQ1ZZY2xXY1ly
    47. ●day 32 任务以及具体安排:https://docs.qq.com/doc/DUGFEdGFWeVhleFF1
    48. ●day 33 周日休息
    49. ●day 34 任务以及具体安排:https://docs.qq.com/doc/DUEh5WFVlQkp1U0p4
    50. ●day 35 任务以及具体安排:https://docs.qq.com/doc/DUFRWc3BGRHFXZ1pO
    51. ●day 36 任务以及具体安排:https://docs.qq.com/doc/DUERGbnhhRkFRVENZ
    52. ●day 37 任务以及具体安排:https://docs.qq.com/doc/DUFVRd3p5SHFMSExQ
    53. ●day 38 任务以及具体安排:https://docs.qq.com/doc/DUGNUdVpoT0VJR01l
    54. ●day 39 任务以及具体安排:https://docs.qq.com/doc/DUE55cVJ5WkNoREhS
    55. ●day 40 周日休息
    56. ●day 41 任务以及具体安排:https://docs.qq.com/doc/DUFhIUXRFYnVGUkFp
    57. ●day 42 任务以及具体安排:42 第八章 动态规划
    58. ●day 43 任务以及具体安排:43第八章 动态规划
    59. ●day 44 任务以及具体安排:44 第八章 动态规划
    60. ●day 45 任务以及具体安排:45 第八章 动态规划
    61. ●day 46 任务以及具体安排:46 第八章 动态规划
    62. ●day 47 周日休息
    63. ●day 48 任务以及具体安排:48 第八章 动态规划
    64. ●day 49 任务以及具体安排:49 第八章 动态规划
    65. ●day 50 任务以及具体安排:50 第八章 动态规划
    66. ●day 51 任务以及具体安排:51 第八章 动态规划
    67. ●day 52 任务以及具体安排:52 第八章 动态规划
    68. ●day 53 任务以及具体安排:53 第八章 动态规划
    69. ●day 54 周日休息
    70. ● day 55 任务以及具体安排:55 第八章 动态规划

    目录

    0583_两个字符串的删除操作

    0072_编辑距离

    编辑距离总结篇


    0583_两个字符串的删除操作

    1. package com.question.solve.leetcode.programmerCarl2._10_dynamicProgramming;
    2. public class _0583_两个字符串的删除操作 {
    3. }
    4. //dp数组中存储word1和word2最长相同子序列的长度
    5. class Solution0583 {
    6. public int minDistance(String word1, String word2) {
    7. int len1 = word1.length();
    8. int len2 = word2.length();
    9. int[][] dp = new int[len1 + 1][len2 + 1];
    10. for (int i = 1; i <= len1; i++) {
    11. for (int j = 1; j <= len2; j++) {
    12. if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
    13. dp[i][j] = dp[i - 1][j - 1] + 1;
    14. } else {
    15. dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
    16. }
    17. }
    18. }
    19. return len1 + len2 - dp[len1][len2] * 2;
    20. }
    21. }
    22. //dp数组中存储需要删除的字符个数
    23. class Solution0583_2 {
    24. public int minDistance(String word1, String word2) {
    25. int[][] dp = new int[word1.length() + 1][word2.length() + 1];
    26. for (int i = 0; i < word1.length() + 1; i++) dp[i][0] = i;
    27. for (int j = 0; j < word2.length() + 1; j++) dp[0][j] = j;
    28. for (int i = 1; i < word1.length() + 1; i++) {
    29. for (int j = 1; j < word2.length() + 1; j++) {
    30. if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
    31. dp[i][j] = dp[i - 1][j - 1];
    32. } else {
    33. dp[i][j] = Math.min(dp[i - 1][j - 1] + 2,
    34. Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1));
    35. }
    36. }
    37. }
    38. return dp[word1.length()][word2.length()];
    39. }
    40. }
    41. //DP - longest common subsequence (用最长公共子序列反推)
    42. class Solution0583_3 {
    43. public int minDistance(String word1, String word2) {
    44. char[] char1 = word1.toCharArray();
    45. char[] char2 = word2.toCharArray();
    46. int len1 = char1.length;
    47. int len2 = char2.length;
    48. int dp[][] = new int[len1 + 1][len2 + 1];
    49. for (int i = 1; i <= len1; i++) {
    50. for (int j = 1; j <= len2; j++) {
    51. if (char1[i - 1] == char2[j - 1])
    52. dp[i][j] = dp[i - 1][j - 1] + 1;
    53. else
    54. dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
    55. }
    56. }
    57. return len1 + len2 - (2 * dp[len1][len2]);//和leetcode 1143只差在這一行。
    58. }
    59. }

    0072_编辑距离

    1. package com.question.solve.leetcode.programmerCarl2._10_dynamicProgramming;
    2. public class _0072_编辑距离 {
    3. }
    4. class Solution0072 {
    5. public int minDistance(String word1, String word2) {
    6. int m = word1.length();
    7. int n = word2.length();
    8. int[][] dp = new int[m + 1][n + 1];
    9. //初始化
    10. for (int i = 1; i <= m; i++) {
    11. dp[i][0] = i;
    12. }
    13. for (int j = 1; j <= n; j++) {
    14. dp[0][j] = j;
    15. }
    16. for (int i = 1; i <= m; i++) {
    17. for (int j = 1; j <= n; j++) {
    18. //因为dp数组有效位从1开始
    19. //所以当前遍历到的字符串的位置为i-1 | j-1
    20. if (word1.charAt(i - 1) == word2.charAt(j - 1)) {
    21. dp[i][j] = dp[i - 1][j - 1];
    22. } else {
    23. dp[i][j] = Math.min(Math.min(dp[i - 1][j - 1], dp[i][j - 1]), dp[i - 1][j]) + 1;
    24. }
    25. }
    26. }
    27. return dp[m][n];
    28. }
    29. }
    30. class Solution0072_2 {
    31. public int minDistance(String word1, String word2) {
    32. int m = word1.length();
    33. int n = word2.length();
    34. int[][] dp = new int[m + 1][n + 1];
    35. for (int i = 1; i <= m; i++) {
    36. dp[i][0] = i;
    37. }
    38. for (int i = 1; i <= n; i++) {
    39. dp[0][i] = i;
    40. }
    41. for (int i = 1; i <= m; i++) {
    42. for (int j = 1; j <= n; j++) {
    43. int left = dp[i][j - 1] + 1;
    44. int mid = dp[i - 1][j - 1];
    45. int right = dp[i - 1][j] + 1;
    46. if (word1.charAt(i - 1) != word2.charAt(j - 1)) {
    47. mid++;
    48. }
    49. dp[i][j] = Math.min(left, Math.min(mid, right));
    50. }
    51. }
    52. return dp[m][n];
    53. }
    54. }

    编辑距离总结篇

    1. 判断子序列
    2. 不同的子序列
    3. 两个字符串的删除操作
    4. 编辑距离
  • 相关阅读:
    【ISO14229_UDS刷写】-1-$34诊断服务RequestDownload理论部分
    百度飞桨(PaddlePaddle)- 张量(Tensor)
    Jekyll 语句语法、功能的实现方法和结构介绍小手册
    教你快速搭建微服务环境
    echart 三角形柱状图
    【计算机网络】第六章:应用层
    设计模式之访问者模式
    [深入理解SSD] 总目录
    C++前缀和算法的应用:用地毯覆盖后的最少白色砖块 原理源码测试用例
    爱上开源之golang入门至实战第四章函数(Func)(二)
  • 原文地址:https://blog.csdn.net/weixin_44949135/article/details/139324494