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

代码随想录打卡第五十八天|● 583. 两个字符串的删除操作 ● 72. 编辑距离

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

题目: 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。
每步 可以删除任意一个字符串中的一个字符。
在这里插入图片描述

题目链接: 583. 两个字符串的删除操作
解题思路:
dp数组的含义:w1[:i-1]与w2[:j-1]相同的最小删除次数
比较当前字母
如果两个字母相同,则不用进行删除操作
即dp[i][j]=dp[i-1][j-1]
如果两个字母不同,要么删除w1 要么删除w2 要么两者都删 取三者最小值
即dp[i][j]=max(dp[i-1][j]+1(删1),dp[i][j-1]+1(删2),dp[i-1][j-1]+2(都删)) 后面的+1和+2是删除的操作次数
代码如下:

class Solution {public int minDistance(String word1, String word2) {//相同 不删 dp[i][j]=dp[i-1][j-1];//不同 删1  删2 都删 dp[i][j]=max(dp[i-1][j]+1(删1),dp[i][j-1]+1(删2),dp[i-1][j-1]+2(都删))int[][] dp=new int[word1.length()+1][word2.length()+1];//初始化int temp=0;for(int i=0;i<=word1.length();i++){dp[i][0]=temp;temp++;}temp=0;for(int j=0;j<=word2.length();j++){dp[0][j]=temp;temp++;}for(int i=1;i<=word1.length();i++){for(int j=1;j<=word2.length();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]+1),dp[i-1][j-1]+2);}}}return dp[word1.length()][word2.length()];}
}

72. 编辑距离(重点复习)

题目: 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符
在这里插入图片描述
题目链接: 72. 编辑距离
解题思路:
相同时 不变 即 dp[i][j]=dp[i-1][j-1];
不同时 取三种操作的最小值 dp[i][j]=Math.min(Math.min(dp[i-1][j]+1,dp[i][j-1]+1),dp[i-1][j-1]+1);
删除w1和添加w2是逆操作 删除w2与添加w1是逆操作 所以写删除或添加即可 这里写删除操作
改操作 dp[i-1][j-1]+1 将 i,j改成相同的值
代码如下

class Solution {public int minDistance(String word1, String word2) {//相同时 不变//不同时 取三种操作的最小值//删除w1和添加w2是逆操作 删除w2与添加w1是逆操作 所以写删除或添加即可 这里写删除操作//改 dp[i-1][j-1]+1 将 i,j改成相同的值int[][] dp=new int[word1.length()+1][word2.length()+1];//初始化int temp=0;for(int i=0;i<=word1.length();i++){dp[i][0]=temp;temp++;}temp=0;for(int j=0;j<=word2.length();j++){dp[0][j]=temp;temp++;}for(int i=1;i<=word1.length();i++){for(int j=1;j<=word2.length();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]+1),dp[i-1][j-1]+1);}}}return dp[word1.length()][word2.length()];}
}
http://www.lryc.cn/news/214584.html

相关文章:

  • 面试流程之——程序员如何写项目经验
  • 框架安全-CVE 漏洞复现DjangoFlaskNode.jsJQuery框架漏洞复现
  • 基于SSM的理发店管理系统
  • 2.Spark的工作与架构原理
  • qt-C++笔记之带有倒计数显示的按钮,计时期间按钮锁定
  • HTML全局属性(global attribute)有哪些?
  • MyBatis-Plus返回getOne返回null疑惑
  • Physics2DPlugin3加载后会跳转gsap官网解决
  • 【AI视野·今日Sound 声学论文速览 第三十二期】Tue, 24 Oct 2023
  • 在Linux上编译gdal3.1.2指南
  • 73. 矩阵置零 --力扣 --JAVA
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • MATLAB算法实战应用案例精讲-【图像处理】机器视觉(基础篇)(八)
  • 由k8s升级慢引起的etcd性能不足的问题排查
  • 如何构建用于Skydel GNSS模拟仿真的SNMP代理方式?
  • vue2+ant-design-vue a-form-model组件二次封装(form表单组件)FormModel 表单
  • 对比解析php和go对JSON处理的区别
  • HTTP和HTTPS本质区别——SSL证书
  • JS 防抖和节流
  • Django开发实例总结(入门级、4.2.6、详细)
  • Variations-of-SFANet-for-Crowd-Counting可视化代码
  • 所有的人机交互都存在不匹配现象
  • LED数码管的静态显示与动态显示(Keil+Proteus)
  • webGL编程指南 第五章 TexturedQuad_Clamp_Mirror
  • 【Azure】存储服务:Azure 的存储账户
  • 高等数学啃书汇总重难点(十一)曲线积分与曲面积分
  • 【算法专题】双指针—盛最多水的容器
  • java入门,程序=数据结构+算法
  • 9.MySQL索引的操作
  • 大型加油站3d全景虚拟现实展示平台实现全方位立体呈现