开门见山

看见这道题,我的第一反应不是去找出符合这道题的动态规划递推公式,我反而认为可以借用一下1143. 最长公共子序列的题解

class Solution {public int longestCommonSubsequence(String text1, String text2) {int[][] dp = new int[text1.length() + 1][text2.length() + 1];for (int i = 1 ; i <= text1.length() ; i++) {char char1 = text1.charAt(i - 1);for(int j = 1; j <= text2.length(); j++){char char2 = text2.charAt(j - 1);if(char1 == char2){dp[i][j] = dp[i - 1][j - 1] + 1;}else{dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);}}}return dp[text1.length()][text2.length()];}
}

将上面最后一行代码改成如下:

        int len = dp[word1.length()][word2.length()];return word1.length() + word2.length() - 2 * len;

求出最长公共序列之后就可以用俩字符串长度相加再减去2倍的len
用了6ms
原题解用了13ms

顺便附上原题解代码

class Solution {public int minDistance(String word1, String word2) {int[][] dp = new int[word1.length() + 1][word2.length() + 1];for (int i = 0; i < word1.length() + 1; i++) dp[i][0] = i;for (int j = 0; j < word2.length() + 1; j++) dp[0][j] = j;for (int i = 1; i < word1.length() + 1; i++) {for (int j = 1; j < word2.length() + 1; 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] + 2,Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1));}}}return dp[word1.length()][word2.length()];}
}

太难理解了2333,投机取巧算了

583. 两个字符串的删除操作用时6ms的另类解法相关推荐

  1. 583. 两个字符串的删除操作

    583. 两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: " ...

  2. 代码随想录算法训练营Day56动态规划:583.两个字符串的删除操作,72.编辑距离

    583.两个字符串的删除操作 文章链接:代码随想录 (programmercarl.com) 思路:动规五步曲 (1)确定dp数组及其含义 dp[i][j]表示字符串1在区间[0, i - 1]和字符 ...

  3. 代码随想录算法训练营第五十六天-动态规划16|● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇

    一.583. 两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: &qu ...

  4. Leetcode 583.两个字符串的删除操作

    两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例 1: 输入: "se ...

  5. 583. 两个字符串的删除操作(JavaScript)

    //找不连续的最长公共子序列 var minDistance = function(w1, w2) {let len1=w1.lengthlet len2=w2.lengthlet dp=new Ar ...

  6. LeetCode 583 两个字符串的删除操作

    思路: 最小操作步数=word1.size+word2.size-2*最长公共子序列长度 (删除word1,word2中的字符只保留它们两个最长公共子序列) 问题转化为求两个字符串的最长公共子序列 动 ...

  7. LeetCode 583. 两个字符串的删除操作(动态规划)

    1. 题目 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: "sea" ...

  8. 124. Leetcode 583. 两个字符串的删除操作 (动态规划- 字符串系列)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示的是word1[:i]和word2[:j]相同所需要的最小步数. 步骤二.推断状态方程: 确定动态转移方程,依然是分相等和不相等. wo ...

  9. leetcode 583. Delete Operation for Two Strings | 583. 两个字符串的删除操作(最长公共子序列,DP)

    题目 https://leetcode.com/problems/delete-operation-for-two-strings/ 题解 本题实质上是个最长公共子序列问题,又是经典的 递归-> ...

最新文章

  1. centeos7安装mariadb
  2. 面了一个 32 岁的程序员,一看就是“卷”出来的
  3. 【每日一算法】搜索插入位置
  4. Python过渡性模块重载(递归重载模块)
  5. 关于dllimport的使用
  6. leetcode417. 太平洋大西洋水流问题(bfs)
  7. ROS笔记(20) Kinect仿真
  8. React-Native的TextInput组件的设置以及获取输入框的内容
  9. java执行cmd命令并获取返回结果字符串
  10. spark mlib入门
  11. swagger测试上传图片报错
  12. POJ 1458 Common Subsequence
  13. JavaScript之WebSocket 技术
  14. 用Python弹奏周董的《菊花台》是什么效果
  15. 离散度计算公式 python_Python实现熵值法确定权重
  16. 计算机任意字符替换,Word中级技巧之同类字符的精确替换
  17. ubuntu 网卡流量_Ubuntu下使用nload查看网卡实时流量
  18. java根据位置信息切割图片
  19. Word2Vec的安装与使用
  20. layUI穿梭框前后端的交互

热门文章

  1. CF1479A Searching Local Minimum
  2. P2870 [USACO07DEC]Best Cow Line G
  3. Counting Triangles
  4. [ONTAK2010] Peaks加强版 (kruskal重构树+主席树+倍增)
  5. 2020年牛客多校第五场C题-easy(纯组合计数不要生成函数的做法)
  6. 线性代数二之矩阵加速DP——数学作业,Arc of Dream
  7. [dsu on tree]树上启发式合并总结(算法思想及模板附例题练习)
  8. CF1110E-Magic Stones【结论题,差分】
  9. 【模拟】Biotech
  10. 28、jdbc操作数据库(5)