题目

https://leetcode.com/problems/delete-operation-for-two-strings/

题解

本题实质上是个最长公共子序列问题,又是经典的 递归->傻缓存->dp 得到最长公共子序列的长度 common,最后,三种方法都统一返回 s1.length() + s2.length() - 2 * common; 即可。

class Solution {// 实质上是个最长公共子序列问题public int minDistance(String s1, String s2) {// Approach 1: Recursive, Brute Force// int common = process1(s1, s2, 0, 0);// Approach 2: Recursion with Memoization// int[][] dp = new int[s1.length() + 1][s2.length() + 1];// for (int i = 0; i < s1.length(); i++) {//     for (int j = 0; j < s2.length(); j++) { // 除了最后一行最后一列以外,全填初始值-1//         dp[i][j] = -1;//     }// }// int common = process2(s1, s2, 0, 0, dp);// Approach 3: Dynamic Programmingint[][] dp = new int[s1.length() + 1][s2.length() + 1];for (int i = 0; i < s1.length(); i++) {for (int j = 0; j < s2.length(); j++) {dp[i][j] = -1;}}for (int p1 = s1.length() - 1; p1 >= 0; p1--) {for (int p2 = s2.length() - 1; p2 >= 0; p2--) {if (s1.charAt(p1) == s2.charAt(p2)) dp[p1][p2] = 1 + dp[p1 + 1][p2 + 1];else dp[p1][p2] = Math.max(dp[p1][p2 + 1], dp[p1 + 1][p2]);}}int common = dp[0][0];return s1.length() + s2.length() - 2 * common;}//     public int process1(String s1, String s2, int p1, int p2) {//         if (p1 == s1.length() || p2 == s2.length()) return 0;
//         int res = 0;
//         if (s1.charAt(p1) == s2.charAt(p2)) res = 1 + process1(s1, s2, p1 + 1, p2 + 1);
//         else res = Math.max(process1(s1, s2, p1 + 1, p2), process1(s1, s2, p1, p2 + 1));
//         return res;
//     }//     public int process2(String s1, String s2, int p1, int p2, int[][] dp) {//         if (dp[p1][p2] >= 0) return dp[p1][p2];
//         int res = 0;
//         if (s1.charAt(p1) == s2.charAt(p2)) res = 1 + process2(s1, s2, p1 + 1, p2 + 1, dp);
//         else res = Math.max(process2(s1, s2, p1 + 1, p2, dp), process2(s1, s2, p1, p2 + 1, dp));
//         dp[p1][p2] = res;
//         return dp[p1][p2];
//     }
}

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

  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 712. Minimum ASCII Delete Sum for Two Strings | 712. 两个字符串的最小ASCII删除和(暴力递归->傻缓存->DP)

    题目 https://leetcode.com/problems/minimum-ascii-delete-sum-for-two-strings/ 题解 经典的 暴力递归 -> 傻缓存 -&g ...

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

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

  6. LeetCode 1035. 不相交的线(最长公共子序列DP)

    文章目录 1. 题目 2. 解题 1. 题目 我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数. 现在,我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == ...

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

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

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

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

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

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

最新文章

  1. 空车上路,Waymo拿下加州首个“真”无人驾驶许可证
  2. 保存mysql用户的登录信息到~.my.cnf文件;用于方便登录操作。
  3. openfire 插件开发
  4. 小王利用计算机设计了一个计算程序,七年级数学上册5.3代数式的值巧求计算机里的代数式的值素材(新版)青岛版...
  5. lpt算法c语言程序,LPT算法的性能(近似).ppt
  6. 【caffe-Windows】caffe+VS2013+Windows+GPU配置+cifar使用
  7. 计算机组装与维护实训1,计算机组装与维护实训报告[1]
  8. pytorch将label转为one hot形式
  9. AVB Digest转换成ASCII码
  10. [C++] Pure Virtual Function and Abstract Class
  11. 01-eclipse打包运行程序总是报错java.lang.NoClassDefFoundError和ava.lang.ClassNotFoundException(打包原理)
  12. linux拷贝文件夹到另一台机器,linux肿么一个文件拷贝到另一个文件夹
  13. Http请求中Content-Type
  14. 【Oracle】创建角色
  15. WiFi图标在任务栏里不见了,提示:适配器Qualcomn Atheros QCA9377 Wireless Network Adapter遇到驱动程序或硬件相关的问题
  16. js给页面添加随机像素噪声背景
  17. Gradle配置及同一应用不同版本配置不同资源文件,不同签名,包名进行打包
  18. html dt和dd顺序,dl dt dd使用方法
  19. 内边距(padding)
  20. 第十三次CCF认证经历

热门文章

  1. 洛谷 - P3389 【模板】高斯消元法(高斯消元解方程)
  2. CodeForces - 1255D Feeding Chicken(贪心+构造+模拟)
  3. python中strip是什么意思啊_Python中的strip()的理解
  4. codeforces contest 1142
  5. 朴素容斥原理[ZJOI2016][bzoj4455]小星星
  6. Adobe Media Server 5(AMS)的安装及使用
  7. C++虚继承(三) --- C++ 对象的内存布局(下)(陈皓)
  8. C++ 动态内存管理:c/c++的动态内存管理,new/delete,operator new/delete,placement-new, 内存泄漏
  9. 如何设计订单系统?不妨看看这篇文章
  10. 【直播预告 | 今天10:30】多媒体技术 PI 第一期:OSS圆桌