当前位置: 首页 > news >正文

代码随想录算法训练营第56天 | 583、72

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

题目描述

给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。
每步 可以删除任意一个字符串中的一个字符。
示例1:
输入: w o r d 1 = " s e a " , w o r d 2 = " e a t " word1 = "sea", word2 = "eat" word1="sea",word2="eat"
输出: 2 2 2
示例2:
输入: w o r d 1 = " l e e t c o d e " , w o r d 2 = " e t c o " word1 = "leetcode", word2 = "etco" word1="leetcode",word2="etco"
输出: 4 4 4

思路

1、确定dp数组
dp[i][j]表示以i-1为结尾的字符串word1和以j-1为结尾的字符串word2,想要达到相等,所需要删除元素的最少次数
2、确定递推公式
当word[i-1]和word2[j-1]相等时,直接等于上一状态即可
不相等时,存在三种情况:
1)删word1[i-1]
2)删word2[j-1]
3)同时删word1[i-1]和word2[j-1]
最后取最小值

解法

class Solution {public int minDistance(String word1, String word2) {int len1 = word1.length();int len2 = word2.length();int[][] dp = new int[len1+1][len2+1];for(int i = 1;i<= len1;i++){for(int j = 1;j<=len2;j++){if(word1.charAt(i-1) == word2.charAt(j-1)){dp[i][j] = dp[i-1][j-1] +1;}else{dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);}}}return len1+len2-dp[len1][len2]*2;}
}

总结

好好看,好好学

72. 编辑距离

题目描述

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符
示例1:
输入: w o r d 1 = " h o r s e " , w o r d 2 = " r o s " word1 = "horse", word2 = "ros" word1="horse",word2="ros"
输出: 3 3 3
示例2:
输入: w o r d 1 = " i n t e n t i o n " , w o r d 2 = " e x e c u t i o n " word1 = "intention", word2 = "execution" word1="intention",word2="execution"
输出: 5 5 5

思路

1、确定dp数组
dp[i][j]表示以下标i-1为结尾的字符串word1,和以下标j-1为结尾的字符串word2,最近编辑距离为dp[i][j]
2、确定递推公式
word1[i-1]和word2[j-1]
相等时,不进行操作
不相等时,可以进行增删改的动作

解法

class Solution {public int minDistance(String word1, String word2) {int m = word1.length();int n = word2.length();int[][] dp = new int[m+1][n+1];for(int i = 1;i<=m;i++){dp[i][0] = i;}for(int j = 1;j<=n;j++){dp[0][j] = j;}for(int i = 1;i<=m;i++){for(int j = 1;j<=n;j++){if(word1.charAt(i-1) == word2.charAt(j-1)){dp[i][j] = dp[i-1][j-1];}else{dp[i][j] = Math.min(Math.min(dp[i-1][j-1],dp[i][j-1]),dp[i-1][j])+1;}}}return dp[m][n];}
}

总结

最近考试周,没细看,我有罪,等考试周结束之后再好好总结

http://www.lryc.cn/news/90662.html

相关文章:

  • c++输入输出文件操作stream
  • 【小呆的力学笔记】非线性有限元的初步认识【三】
  • python计算闰年
  • 聊聊如何使用Js写一个简单的二级联动和三级联动呢?
  • IPv4 和 IPv6 的特点、区别以及在互联网中的应用
  • JavaScript处理移动web交互
  • 4年测试经验,一问三不知,过于离谱...
  • Java 与查找算法(2)二分查找
  • Java程序设计入门教程--原始类与包装类
  • pip安装python库速度慢、失败及超时报错解决办法
  • 向量数据库
  • leetcode 11.盛最多水的容器
  • 都说00后已经躺平了,但是有一说一,该卷的还是卷啊。
  • 牛客网刷题学习SQL(二)
  • 深蓝学院 C++笔记 先导篇章 - 绪论
  • R7-19 天梯赛团队总分
  • 使用 Kotlin 的 Opt-in (选择加入)功能注解API提示当前非稳定API
  • webpack配置排除打包
  • HNU-操作系统OS-ucoreLab系列-感悟
  • MySQL运维篇(三)
  • Lecture 2 Text Preprocessing
  • web练习第二周
  • LC-1439. 有序矩阵中的第 k 个最小数组和(二分答案、多路归并)
  • 一文1000字从0到1实现Jenkins+Allure+Pytest的持续集成
  • 给一个有序数组生成平衡搜索二叉树(java)
  • 【JavaSE】Java基础语法(二十二):包装类
  • javascript基础十八:说说你对JavaScript中事件循环的理解​
  • 详解js中的浅拷贝与深拷贝
  • Day9 敏捷测试——敏捷开发的特征、什么是敏捷测试?、极限编程、极限测试
  • k8s 维护node与驱逐pod