leetcode 583. Delete Operation for Two Strings | 583. 两个字符串的删除操作(最长公共子序列,DP)
题目
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)相关推荐
- 583. 两个字符串的删除操作
583. 两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: " ...
- 代码随想录算法训练营Day56动态规划:583.两个字符串的删除操作,72.编辑距离
583.两个字符串的删除操作 文章链接:代码随想录 (programmercarl.com) 思路:动规五步曲 (1)确定dp数组及其含义 dp[i][j]表示字符串1在区间[0, i - 1]和字符 ...
- 代码随想录算法训练营第五十六天-动态规划16|● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇
一.583. 两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: &qu ...
- leetcode 712. Minimum ASCII Delete Sum for Two Strings | 712. 两个字符串的最小ASCII删除和(暴力递归->傻缓存->DP)
题目 https://leetcode.com/problems/minimum-ascii-delete-sum-for-two-strings/ 题解 经典的 暴力递归 -> 傻缓存 -&g ...
- LeetCode 583. 两个字符串的删除操作(动态规划)
1. 题目 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: "sea" ...
- LeetCode 1035. 不相交的线(最长公共子序列DP)
文章目录 1. 题目 2. 解题 1. 题目 我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数. 现在,我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == ...
- 124. Leetcode 583. 两个字符串的删除操作 (动态规划- 字符串系列)
步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示的是word1[:i]和word2[:j]相同所需要的最小步数. 步骤二.推断状态方程: 确定动态转移方程,依然是分相等和不相等. wo ...
- Leetcode 583.两个字符串的删除操作
两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例 1: 输入: "se ...
- LeetCode 583 两个字符串的删除操作
思路: 最小操作步数=word1.size+word2.size-2*最长公共子序列长度 (删除word1,word2中的字符只保留它们两个最长公共子序列) 问题转化为求两个字符串的最长公共子序列 动 ...
最新文章
- 空车上路,Waymo拿下加州首个“真”无人驾驶许可证
- 保存mysql用户的登录信息到~.my.cnf文件;用于方便登录操作。
- openfire 插件开发
- 小王利用计算机设计了一个计算程序,七年级数学上册5.3代数式的值巧求计算机里的代数式的值素材(新版)青岛版...
- lpt算法c语言程序,LPT算法的性能(近似).ppt
- 【caffe-Windows】caffe+VS2013+Windows+GPU配置+cifar使用
- 计算机组装与维护实训1,计算机组装与维护实训报告[1]
- pytorch将label转为one hot形式
- AVB Digest转换成ASCII码
- [C++] Pure Virtual Function and Abstract Class
- 01-eclipse打包运行程序总是报错java.lang.NoClassDefFoundError和ava.lang.ClassNotFoundException(打包原理)
- linux拷贝文件夹到另一台机器,linux肿么一个文件拷贝到另一个文件夹
- Http请求中Content-Type
- 【Oracle】创建角色
- WiFi图标在任务栏里不见了,提示:适配器Qualcomn Atheros QCA9377 Wireless Network Adapter遇到驱动程序或硬件相关的问题
- js给页面添加随机像素噪声背景
- Gradle配置及同一应用不同版本配置不同资源文件,不同签名,包名进行打包
- html dt和dd顺序,dl dt dd使用方法
- 内边距(padding)
- 第十三次CCF认证经历
热门文章
- 洛谷 - P3389 【模板】高斯消元法(高斯消元解方程)
- CodeForces - 1255D Feeding Chicken(贪心+构造+模拟)
- python中strip是什么意思啊_Python中的strip()的理解
- codeforces contest 1142
- 朴素容斥原理[ZJOI2016][bzoj4455]小星星
- Adobe Media Server 5(AMS)的安装及使用
- C++虚继承(三) --- C++ 对象的内存布局(下)(陈皓)
- C++ 动态内存管理:c/c++的动态内存管理,new/delete,operator new/delete,placement-new, 内存泄漏
- 如何设计订单系统?不妨看看这篇文章
- 【直播预告 | 今天10:30】多媒体技术 PI 第一期:OSS圆桌