583. 两个字符串的删除操作用时6ms的另类解法
开门见山
看见这道题,我的第一反应不是去找出符合这道题的动态规划递推公式,我反而认为可以借用一下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的另类解法相关推荐
- 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 583.两个字符串的删除操作
两个字符串的删除操作 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例 1: 输入: "se ...
- 583. 两个字符串的删除操作(JavaScript)
//找不连续的最长公共子序列 var minDistance = function(w1, w2) {let len1=w1.lengthlet len2=w2.lengthlet dp=new Ar ...
- LeetCode 583 两个字符串的删除操作
思路: 最小操作步数=word1.size+word2.size-2*最长公共子序列长度 (删除word1,word2中的字符只保留它们两个最长公共子序列) 问题转化为求两个字符串的最长公共子序列 动 ...
- LeetCode 583. 两个字符串的删除操作(动态规划)
1. 题目 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符. 示例: 输入: "sea" ...
- 124. Leetcode 583. 两个字符串的删除操作 (动态规划- 字符串系列)
步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示的是word1[:i]和word2[:j]相同所需要的最小步数. 步骤二.推断状态方程: 确定动态转移方程,依然是分相等和不相等. wo ...
- leetcode 583. Delete Operation for Two Strings | 583. 两个字符串的删除操作(最长公共子序列,DP)
题目 https://leetcode.com/problems/delete-operation-for-two-strings/ 题解 本题实质上是个最长公共子序列问题,又是经典的 递归-> ...
最新文章
- centeos7安装mariadb
- 面了一个 32 岁的程序员,一看就是“卷”出来的
- 【每日一算法】搜索插入位置
- Python过渡性模块重载(递归重载模块)
- 关于dllimport的使用
- leetcode417. 太平洋大西洋水流问题(bfs)
- ROS笔记(20) Kinect仿真
- React-Native的TextInput组件的设置以及获取输入框的内容
- java执行cmd命令并获取返回结果字符串
- spark mlib入门
- swagger测试上传图片报错
- POJ 1458 Common Subsequence
- JavaScript之WebSocket 技术
- 用Python弹奏周董的《菊花台》是什么效果
- 离散度计算公式 python_Python实现熵值法确定权重
- 计算机任意字符替换,Word中级技巧之同类字符的精确替换
- ubuntu 网卡流量_Ubuntu下使用nload查看网卡实时流量
- java根据位置信息切割图片
- Word2Vec的安装与使用
- layUI穿梭框前后端的交互
热门文章
- CF1479A Searching Local Minimum
- P2870 [USACO07DEC]Best Cow Line G
- Counting Triangles
- [ONTAK2010] Peaks加强版 (kruskal重构树+主席树+倍增)
- 2020年牛客多校第五场C题-easy(纯组合计数不要生成函数的做法)
- 线性代数二之矩阵加速DP——数学作业,Arc of Dream
- [dsu on tree]树上启发式合并总结(算法思想及模板附例题练习)
- CF1110E-Magic Stones【结论题,差分】
- 【模拟】Biotech
- 28、jdbc操作数据库(5)