操作一:word1删除一个元素,那么就是以下标i - 2为结尾的word1 与 j-1为结尾的word2的最近编辑距离 再加上一个操作。 即dp[i][j] = dp[i - 1][j] + 1; 操作二:word2删除一个元素,那么就是以下标i - 1为结尾的word1 与 j-2为结尾的word2的最近编辑距离 再加上一个操作。 即dp[i][j] ...
初始化:各自删到空字符串的数量 dp[a][0] = a; dp[0][b] = b; 遍历顺序:顺序 打印dp数组 classSolution{public:intminDistance(stringword1,stringword2){vector<vector<int>>dp(word1.size()+1,vector<int>(word2.size()+1,0));for(inta=1;a<=word1.size();a++)dp[a][0]=a;for(int...
动态规划:两个字符串的删除操作 // 写代码时长 // 2023-08-21 22:53:00 // 2023-08-21 23:33:00 // 40分钟 /解题思路 dp[i][j]表示word1[0:i-1]与word2[0:j-1]需要最少删除多少次才相等,即dp[i][j]次 /解题思路 或者最长公共子序列也可以解题!!! class Solution { public: int min...
1classSolution {2publicintminDistance(String word1, String word2) {3/**4本题采用 求最长公共子序列的思路 进行解决5只要求出两个字符串的最长公共子序列长度即可,6最后用两个字符串的总长度减去两个最长公共子序列的长度就是要删除的最少步数7*/89int[][] dp =newint[word1.length() + 1][word2....
= word2[j-1],且没有增加最长子串,那么删除2个# 此时延伸word1以及延伸word2,都导致删除个数+1,即相等,那么需要再删除1个,共删除2个# 2. 边界条件# i=0或者j=0# 3. 终止条件# i =num1 且j = num2foriinrange(num1+1):dp[i][0]=iforjinrange(num2+1):dp[0][j]=j# print(dp)fori...
思路:本题要求使得 word1 和 word2 相同所需要删除的最小字符数,也就是说要找到最大的公共子串需要删除多少个字符,那么本题依旧可以延续之前的思路,不同的地方在于本题是两个字符串都可以删,也就是在推导条件的时候需要做出变化,其他基本思路相同。
两个字符串的删除操作 题目 给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。 示例: 输入: "sea", "eat" 输出: 2 解释: 第一步将"sea"变为"ea",第二步将"eat"变为"ea" ...
55 changes: 35 additions & 20 deletions 55 problems/0583.两个字符串的删除操作.md Original file line numberDiff line numberDiff line change@@ -228,28 +228,43 @@ func min(a, b int) int { ``` Javascript: ```javascript const minDistance = (word1, word2) => {...
for c in s2: s1 = s1.replace(c, '') print(s1) 代码思路如下: 1、读入字符串s1和s2; 2、遍历字符串s2,对于s2中的每个字符,我们在s1中查找其是否出现; 3、如果出现,则使用replace方法将该字符从s1中删除; 4、最后输出删除操作后的字符串s1。 根据以上分析即可求出答案。反馈...
问题:给你两个单词word1和word2,请问至少需要几次删除操作使得word1和word2变得一样?每一步你都可以从word1或者word2里删除一个字符。 例如,如果输入两个单词"sea"和"eat",我们至少需要两步删除操作,分别删除第一个单词的's'和第二个单词的't',使得它们变成相同的"ea"。