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

代码随想录第五十六天

代码随想录第五十六天

    • Leetcode 583. 两个字符串的删除操作
    • Leetcode 72. 编辑距离

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

题目链接: 两个字符串的删除操作
自己的思路:想到了,但是初始化初始错了!!!!

思路1:直接动规五部曲:1、dp数组的含义:dp[i][j]表示以i-1和j-1为结尾的两个字符串的最少字符删除个数;2、递推公式:这里考虑两种情况:(1)、当dp[i-1]==dp[j-1]的时候,两个元素的是相等的,那么这两个元素就不用删,所以说dp[i][j]还是等于dp[i-1][j-1]的;(2)、当dp[i-1]!=dp[j-1]的时候,两个元素不相等,这里就要考虑将其中一个元素删除掉,如果删除s1[i-1],那么就是dp[i-1][j]+1,如果删除s2[j-1],那么就是dp[i][j-1]+1,如果两个都删的话那就是dp[i-1][j-1]+2;3、dp数组的初始化:这里由于某个点的值,是由其左上角、上方、左方元素得到,所以我们初始化的时候一定要初始化第一行和第一列,拿第一行为例,dp[0][j],也就是s1是空字符串,s2非空,那么删除的元素个数其实就是j的值,第一列也同理;4、遍历顺序:前面说了,由左上方三个元素确定,所以一定是左到右,上到下遍历;5、打印dp数组:主要用于debug!!!!!

代码:

class Solution {public int minDistance(String word1, String word2) {char[] c1 = word1.toCharArray();char[] c2 = word2.toCharArray();int m = c1.length;int n = c2.length;int[][] dp = new int[m+1][n+1];for (int i =0;i<=m;i++){dp[i][0] = i;}for (int i =0;i<=n;i++){dp[0][i] = i;}dp[0][0]=0;for (int i =1;i<=m;i++){for (int j=1;j<=n;j++){//递推公式if (c1[i-1]==c2[j-1]){dp[i][j] = dp[i-1][j-1];}else{dp[i][j] = Math.min(dp[i-1][j]+1,Math.min(dp[i][j-1]+1,dp[i-1][j-1]+2));}}}return dp[m][n];}
}

思路2:最长公共子序列的思路!!!

代码:

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++){for (int j=1;j<=n;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 m+n-2*dp[m][n];}
}

Leetcode 72. 编辑距离

题目链接: 编辑距离
自己的思路:思路差不多,只是没调出来!!!!

正确思路:直接动规五部曲:1、dp数组的含义:以s1[i-1]结尾的s1和以s2[j-1]结尾的s2,怎么操作才可以由s1变到s2;2、递推公式:这里还是涉及两种情况:(1)、s1[i-1]=s2[j-1],这种情况下,是不需要变元素的,所以直接dp[i][j]=dp[i-1][j-1];(2)、s1[i-1]!=s2[j-1],这种情况下,我们就需要做增删替换了,我们可以将s1[i-1]删掉,就变成了dp[i-1][j]+1,将s2[i-1]删掉,就变成了dp[i][j-1]+1,这里其实是可以动s2的,因为s1的增相当于s2的删,s1的删相当于s2的增,还有一种情况是替换的情况,我们需要替换一个元素可以达到(1)的效果,那么就是dp[i-1][j-1]+1;3、dp数组初始化:这里其实和上一题一样的初始化;4、遍历:同上;5、打印dp数组:主要用于debug!!!!

代码:

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 =0;i<=m;i++){dp[i][0] = i;}for (int j=0;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(dp[i-1][j]+1,Math.min(dp[i][j-1]+1,dp[i-1][j-1]+1));}}}return dp[m][n];}
}

相关文章:

代码随想录第五十六天

代码随想录第五十六天 Leetcode 583. 两个字符串的删除操作Leetcode 72. 编辑距离 Leetcode 583. 两个字符串的删除操作 题目链接: 两个字符串的删除操作 自己的思路:想到了&#xff0c;但是初始化初始错了&#xff01;&#xff01;&#xff01;&#xff01; 思路1:直接动规五…...

.NET 最便捷的Log4Net日志记录器

最便捷的Log4Net使用方法 LOG4NET 配置日志记录器开始引用nuget LOG4NET 配置日志记录器 Apache log4net 库是一个帮助程序员将日志语句输出到各种的工具 的输出目标。log4net是优秀的Apachelog4j™框架的移植 Microsoft.NET 运行时。我们保持了与原始log4j相似的框架 同时利…...

深入探讨软件逆向工程:解密黑盒的奥秘

引言 逆向工程作为计算机科学领域中的一项关键技术&#xff0c;扮演着解密、漏洞分析、反病毒等诸多领域的重要角色。本文将深入探讨逆向工程的概念、应用领域以及一些常用的逆向工程技术。 什么是逆向工程&#xff1f; 逆向工程是指通过分析已有的程序或设备&#xff0c;推…...

利用tidevice+mysql+grafana实现ios性能测试

利用tidevicemysqlgrafana实现ios性能测试 1.什么是tidevice&#xff1f; tidevice是一个可以和ios设备进行通信的工具&#xff0c;提供以下功能&#xff1a; 截图获取手机信息ipa包的安装和卸载根据bundleID 启动和停止应用列出安装应用信息模拟Xcode运行XCTest&#xff0c…...

内网安全:WMI协议与SMB协议横向移动

目录 网络拓扑图 网络环境说明 WMI协议 SMB协议 域内信息收集 WMI协议 - 横向移动 利用方式一&#xff1a;wmic命令 利用方式一&#xff1a;cscript 利用方式一&#xff1a;impacket SMB协议 - 横向移动 利用方式一&#xff1a;psexec 利用方式二&#xff1a;psexe…...

05-Numpy基础-用于数组的文件输入输出

np.save和np.load是读写磁盘数组数据的两个主要函数。默认情况下&#xff0c;数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中的&#xff1a; 如果文件路径末尾没有扩展名.npy&#xff0c;则该扩展名会被自动加上。然后就可以通过np.load读取磁盘上的数组&#xff1…...

Docker微服务实战

文章目录 业务需求IDEA编写代码编写Dockerfile构建镜像运行容器网页端访问测试 业务需求 利用Docker部署应用服务&#xff0c;实现在网页端通过输入地址 ip:端口/hello/docker&#xff0c;页面显示hello docker ! IDEA编写代码 创建springboot项目 网上很多教程,此步骤省略……...

NLNet论文总结和代码实现

Non-local Neural Networks&#xff08;非局部神经网络&#xff09;&#xff1a;使用自注意力机制捕获远程依赖。 论文&#xff1a; https://arxiv.org/pdf/1711.07971.pdf 源码&#xff1a; 长距离依赖关系&#xff0c;顾名思义&#xff0c;是要和远程建立关系&#xff0c;在l…...

数字 IC 设计职位经典笔/面试题(三)

共100道经典笔试、面试题目&#xff08;文末可全领&#xff09; 1. IC 设计中同步复位与异步复位的区别&#xff1f; 同步复位在时钟沿变化时&#xff0c;完成复位动作。异步复位不管时钟&#xff0c;只要复位信号满足条件&#xff0c;就完成复位动作。异步复位对复位信号要求…...

Matlab分割彩色图像

彩色图像 彩色图像除有亮度信息外&#xff0c;还包含有颜色信息。以最常见的RGB&#xff08;红绿蓝&#xff09;彩色空间为例来简要说明彩色图像&#xff1a; 彩色图像可按照颜色的数目来划分。例如&#xff0c;256色图像和真彩色图像&#xff08;2的16次方&#xff1d;21677…...

[数据集][目标检测]垃圾目标检测数据集VOC格式14963张44类别

数据集格式&#xff1a;Pascal VOC格式(不包含分割的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;14963 标注数量(xml文件个数)&#xff1a;14963 标注类别数&#xff1a;44 标注类别名称:["toiletries","plastic utensi…...

MATLAB算法实战应用案例精讲-【深度学习】推荐系统模型DSSMDeepFM

目录 前言 DSSM 输入层 英文 中文 表示层 匹配层 优缺点 DeepFM模...

基于springboot的社区生活缴费系统/基于javaweb的水电缴费系统

摘 要 网络的广泛应用给生活带来了十分的便利。所以把社区生活缴费管理与现在网络相结合&#xff0c;利用java语言建设社区生活缴费系统&#xff0c;实现社区生活缴费管理的信息化。则对于进一步提高社区生活缴费管理发展&#xff0c;丰富社区生活缴费管理经验能起到不少的促进…...

Linux —— keepalived

简介 Keepalived 是一个用 C 语言编写的路由软件。这个项目的主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载均衡和高可用性功能。 Keepalived 开源并且免费的软件。 Keepalived 的2大核心功能 1. loadbalance 负载均衡 LB&#xff1a;ipvs--》lvs软件…...

ubuntu安装pyenv

Pyenv是一种轻量级的Python版本管理工具&#xff0c;它可以让你在同一台机器上同时管理多个Python版本。这个工具对于开发者来说非常有用&#xff0c;因为在不同的项目中可能需要使用不同版本的Python。下面是在Ubuntu系统上安装pyenv&#xff0c;并配置环境变量的步骤&#xf…...

【Kubernetes】对外服务之 Ingress

目录 简介 Ingress 组成 ●ingress ●ingress-controller Ingress-Nginx 工作原理 部署 nginx-ingress-controller 1、部署ingress-controller Pod及相关资源 ingress 暴露服务的方式 ●方式一&#xff1a;DaemonSetHostNetworknodeSelector ●方式二&#xff1a;Dep…...

大数据项目实战(安装准备)

一&#xff0c;搭建大数据集群环境 1.1安装准备 1.1.1虚拟机安装与克隆 1.虚拟机的安装和设置以及启动虚拟机并安装操作系统&#xff08;以下仅供参考&#xff09; 安装一台虚拟机主机名为&#xff1a;hadoop01的虚拟机备用 VMware虚拟机安装Linux教程(超详细)_vmware安装…...

SAP ABAP基础语法-内表篇(二)

十一、使用 SPLIT 直接拆分到内表&#xff1a; DATA: BEGIN OF auth_data OCCURS 0,text(1024),END OF auth_data.STR SE39/SE39/SE01/SE10.SPLIT STR AT / INTO TABLE auth_data. 二十、CONDENSE 的用法&#xff1a; 把工作区的内的所有字段的值 赋给 字符串 DATA: BEGIN O…...

读SQL学习指南(第3版)笔记05_过滤

1. 不需要考虑排除任何列 1.1. 清除数据表中所有的内容 1.2. 暂存新数据仓库的数据 1.3. 向数据表中新添一列后 1.4. 修改数据表中的所有行 1.5. 检索消息队列表中的所有行 2. where子句 2.1. 可以在其中指定一个或多个过滤条件&#xff0c;用于限制SQL语句处理的行数 …...

防火墙组建双击热备后老是主备自动切换怎么处理?

环境: 2台主备防火墙 8.0.75 AF-2000-FH2130B-SC 核心交换机 H3C S6520-26Q-SI version 7.1.070, Release 6326 问题描述: 防火墙组建双击热备后老是主备自动切换怎么处理? 查看切换日志,本地故障值小于对端,经常自动切换导致eth3接口业务老是自动断开,切换频率,…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...