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

代码随想录Day_56打卡

①、两个字符串的删除操作

给定两个单词 word1 和 word2 ,返回使得 word1 和  word2 相同所需的最小步数

每步 可以删除任意一个字符串中的一个字符。

事例:

输入: word1 = "sea", word2 = "eat"
输出: 2
解释: 第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea"

思路:

        使用动态规划,dp定义为:dp[i][j]表示word1从0到i - 1要跟word2从0到j - 1相同的最小删除次数。若word1[i - 1] == word2[j - 1],则此时不需要删除,dp[i][j] = dp[i - 1][j - 1]。若不相同,则需要删除其中一个,若删除word1,则dp变为i - 1与j匹配,dp[i][j] = dp[i - 1][j] + 1,若删除word2,则dp变为i与j - 1匹配,dp[i][j] = dp[i][j - 1] + 1,两者选择最小值即可。

动态规划:

        dp定义及含义:dp[i][j]表示word1从0到i - 1要跟word2从0到j - 1相同的最小删除次数。

        状态转移方程:if(word1[i - 1] == word2[j - 1]) dp[i][j] = dp[i - 1][j - 1]

                                else dp[i][j] = Math.min(dp[i - 1][j] + 1,dp[i][j - 1] + 1)

        初始化:第一行和第一列表示一个字符串到空串需要删除多少次,其实就是删除另一个字符串的长度,dp[i][0] = i , dp[0][j] = j。

        遍历顺序:两个for循环嵌套遍历

        dp[word1.length()][word2.length()]即为答案。

代码:

public int minDistance(String word1, String word2) {int[][] dp = new int[word1.length() + 1][word2.length() + 1];for(int i = 1;i <= word1.length();i++){dp[i][0] = i;}for(int j = 1;j <= word2.length();j++){dp[0][j] = j;}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(dp[i - 1][j] + 1,dp[i][j - 1] + 1);}}}return dp[word1.length()][word2.length()];}

②、编辑距离

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数  。

你可以对一个单词进行如下三种操作:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

事例:

输入:word1 = "horse", word2 = "ros"
输出:3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')

思路:

        与上一题类似,只是这道题多了插入和替换操作。对于两个字符串,其实存在逆向操作,如:像word1添加一个字符,也可以换为让word2删除一个字符。故不需要考虑只向word1或word2操作,和不需要考虑添加删除操作,只需要考虑删除和替换操作。

删除与上题一样,替换操作理解成:word1与word2需要替换其中一个字符,则只需要操作一次,在两者的前一个字符中选择一个替换,即dp[i][j] = dp[i - 1][j - 1] + 1。

动态规划:

        dp定义及含义:dp[i][j]表示word1从0到i - 1要跟word2从0到j - 1相同需要操作多少次。

        状态转移方程:if(word1[i - 1] == word[j - 1]) dp[i][j] = dp[i - 1][j - 1]

                                 else dp[i][j] = Math.min(dp[i - 1][j] + 1,dp[i][j - 1] + 1,dp[i - 1][j - 1] + 1)。

        初始化:dp[i][0] = i,dp[0][j] = j

        遍历顺序:两个for循环嵌套遍历

        dp[word1.length()][word2.length()]即为答案。

代码:

public int minDistance(String word1, String word2) {int[][] dp = new int[word1.length() + 1][word2.length() + 1];for(int i = 1;i <= word1.length();i++){dp[i][0] = i;}for(int j = 1;j <= word2.length();j++){dp[0][j] = j;}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(dp[i - 1][j] + 1,Math.min(dp[i][j - 1] + 1,dp[i - 1][j - 1] + 1));}}}return dp[word1.length()][word2.length()];}

参考:代码随想录 (programmercarl.com)

相关文章:

代码随想录Day_56打卡

①、两个字符串的删除操作 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 事例&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "sea&…...

高忆管理:六连板捷荣技术或难扛“华为概念股”大旗

在本钱商场上名不见经传的捷荣技术&#xff08;002855.SZ&#xff09;正扛起“华为概念股”大旗。 9月6日&#xff0c;捷荣技术已拿下第六个连续涨停板&#xff0c;短短七个生意日&#xff0c;股价累积涨幅逾越90%。公司已连发两份股票生意异动公告。 是炒作&#xff0c;还是…...

「解析」YOLOv5 classify分类模板

学习深度学习有些时间了&#xff0c;相信很多小伙伴都已经接触 图像分类、目标检测甚至图像分割(语义分割)等算法了&#xff0c;相信大部分小伙伴都是从分类入门&#xff0c;接触各式各样的 Backbone算法开启自己的炼丹之路。 但是炼丹并非全是 Backbone&#xff0c;更多的是各…...

交换排序——冒泡排序、快速排序

交换排序就是通过比较交换实现排序。分冒泡排序和快速排序两种。 一、冒泡排序&#xff1a; 1、简述 顾名思义就是大的就冒头&#xff0c;换位置。 通过多次重复比较、交换相邻记录而实现排序&#xff1b;每一趟的效果都是将当前键值最大的记录换到最后。 冒泡排序算法的原…...

Android 10.0 禁用adb shell input输入功能

1.前言 在10.0的产品开发中,在进行一些定制开发中,对于一些adb shell功能需要通过属性来控制禁止使用input 等输入功能,比如adb shell input keyevent 响应输入事件等,所以就需要 熟悉adb shell input的输入事件流程,然后来禁用adb shell input的输入事件功能,接下来分…...

cuda显存访问耗时

背景&#xff1a; 项目中有个数据量大小为5195 * 512 * 128float 1.268G的显存&#xff0c;发现有个函数调用很耗时&#xff0c;函数里面就是对这个显存进行128个元素求和&#xff0c;得到一个5195 * 512的图像 分析 1. 为什么耗时 直观上感觉这个流程应该不怎么耗时才对&a…...

【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用

文章目录 一、拖拽事件1.1 拖拽事件1.2 案例&#xff1a;拖拽丢弃图片 二、音频和视频三、defer 与 async 属性3.1 概述3.2 示例一&#xff1a;3.3 示例二&#xff1a; 四、dialog 元素 一、拖拽事件 原生JavaScipt案例合集 JavaScript DOM基础 JavaScript 基础到高级 Canvas…...

独享IP vs. 共享IP:哪种更适合你?

无论是个人用户还是企业组织&#xff0c;在互联网上都需要一个唯一标识来与其他设备进行通信。这就涉及到使用独立分配给自己或多个用户分享的公共 IP 地址&#xff08;也称为共享 IP&#xff09;。那么&#xff0c;究竟应该选择独占一个专用地址还是与他人分享相同地址呢&…...

【Arduino27】DHT11温湿度传感器模拟值实验

硬件准备 DHT11温湿度&#xff1a;1个 面包板&#xff1a;1个 杜邦线&#xff1a;3根 硬件连线 VDD引脚接 5V 电源 DATE引脚接 4号 接口 GND引脚接 GND 接口 软件程序 #include<DHT.h>#define DHT11_pin 4 //温湿度传感器引脚DHT dht(DHT11_pin,DHT11);float tem…...

dockerfile基于apline将JDK20打包成镜像

dockerfile基于apline将JDK20打包成镜像 ​ 今天就来和大家聊聊如何把最新出版的JDK20打包成docker镜像&#xff0c;很多uu都会采用centos作为基础镜像&#xff0c;这么做会有一个问题&#xff0c;centos系统会含有很多库文件&#xff0c;这些库文件JDK程序并不是完全需要的&a…...

MATLAB基础-MAT文件的读写操作

简介 MAT文件是MATLAB格式的双精度二进制数据文件&#xff0c;由MATLAB软件创建&#xff0c;可以使用MATLAB软件再其他计算机上以其他浮点格式读取&#xff0c;同时也可以使用其他软件通过MATLAB的应用程序接口来进行读写操作。如果只是再MATLAB环境中处理数据&#xff0c;使用…...

PostgreSQL PG15 新功能 PG_WALINSPECT

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 liuaustin3 &#xff08;…...

时序预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-BiLSTM时间卷积双向长短期记忆神…...

数据结构和算法(2):向量

抽象数据类型 数组到向量 C/C 中&#xff0c;数组A[]中的元素与[0,n)内的编号一一对应&#xff0c;A[0],A[1],...,A[n-1]&#xff1b;反之&#xff0c;每个元素均由&#xff08;非负&#xff09;编号唯一指代&#xff0c;并可直接访问A[i] 的物理地址 Ai s&#xff0c;s 为单…...

mysql 大表如何ddl

大家好&#xff0c;我是蓝胖子&#xff0c;mysql对大表(千万级数据)的ddl语句&#xff0c;在生产上执行时一定要千万小心&#xff0c;一不小心就有可能造成业务阻塞&#xff0c;数据库io和cpu飙高的情况。今天我们就来看看如何针对大表执行ddl语句。 通过这篇文章&#xff0c;…...

C++新特性:智能指针

一 、为什么需要智能指针 智能指针主要解决以下问题&#xff1a; 1&#xff09;内存泄漏&#xff1a;内存手动释放&#xff0c;使用智能指针可以自动释放 2&#xff09;共享所有权指针的传播和释放&#xff0c;比如多线程使用同一个对象时析构问题&#xff0c;例如同样的数据…...

SAP FI之批量修改财务凭证的BAPI

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 一般涉及修改财务凭证&#xff0c;或者其它凭证&#xff0c;不应直接更新数据库&#xff0c;而是使用系统提供的function module,或者BAPI&#xff0c;或者使用BDC。 一、 示例&#xf…...

Spring Boot + Vue的网上商城之商品分类

Spring Boot Vue的网上商城之商品分类 在网上商城中&#xff0c;商品分类是非常重要的一个功能&#xff0c;它可以帮助用户更方便地浏览和筛选商品。本文将介绍如何使用Spring Boot和Vue来实现商品分类的功能&#xff0c;包括一级分类和二级分类的管理以及前台按分类浏览商品…...

Docker 容器逃逸漏洞 (CVE-2020-15257)复现

漏洞概述 containerd是行业标准的容器运行时&#xff0c;可作为Linux和Windows的守护程序使用。在版本1.3.9和1.4.3之前的容器中&#xff0c;容器填充的API不正确地暴露给主机网络容器。填充程序的API套接字的访问控制验证了连接过程的有效UID为0&#xff0c;但没有以其他方式…...

Python 如何使用 csv、openpyxl 库进行读写 Excel 文件详细教程(更新中)

csv 基本概述 首先介绍下 csv (comma separated values)&#xff0c;即逗号分隔值&#xff08;也称字符分隔值&#xff0c;因为分隔符可以不是逗号&#xff09;&#xff0c;是一种常用的文本格式&#xff0c;用以存储表格数据&#xff0c;包括数字或者字符。 程序在处理数据时…...

SQL Server报错注入原理与实战:从错误机制到WAF绕过

1. 报错注入不是“碰运气”&#xff0c;而是对SQL Server错误机制的精准利用很多人一听到“报错注入”&#xff0c;第一反应是“得看目标网站开不开错误提示”“得撞运气看有没有报错回显”。这种理解停留在表层&#xff0c;甚至会误导初学者放弃深入——其实恰恰相反&#xff…...

Cortex-M3 LOCKUP机制解析与嵌入式系统容错设计

1. Cortex-M3 LOCKUP机制解析LOCKUP是ARM Cortex-M3处理器中的一种特殊状态&#xff0c;当系统遇到无法恢复的严重错误时会进入该状态。理解LOCKUP机制对于嵌入式系统开发者至关重要&#xff0c;因为它直接关系到系统的可靠性和故障恢复能力。LOCKUP状态的核心特征是程序计数器…...

美股软件股反弹:AI 重塑软件未来,谁能成为时代赢家?

美股软件股遭遇“集体误杀”去年 10 月底开始&#xff0c;美股软件股经历罕见“集体误杀”。以软件 ETF——IGV 为代表&#xff0c;软件板块从高位显著回撤&#xff0c;跌幅接近 40%。曾经的高质量成长资产软件公司&#xff0c;沦为 AI 浪潮下的“旧世界遗产”。恐慌源于 DeepS…...

服务器末级缓存管理优化与Garibaldi架构解析

1. 服务器末级缓存管理的核心挑战 在现代服务器架构中&#xff0c;末级缓存(Last-Level Cache, LLC)作为CPU与主存之间的关键缓冲层&#xff0c;其管理效率直接影响系统整体性能。传统LLC管理面临一个根本性矛盾&#xff1a;随着核心数量增加和负载多样化&#xff0c;有限的缓存…...

飞凌OKMX6ULL-C开发板深度评测:从硬件解析到系统性能实战

1. 开箱与初识&#xff1a;飞凌OKMX6ULL-C开发平台拿到飞凌OKMX6ULL-C开发板的第一印象&#xff0c;是它比我想象中要“工整”不少。核心板&#xff08;FETMX6ULL-C&#xff09;和底板通过高可靠性的板对板连接器接插&#xff0c;这种设计在工业级产品中很常见&#xff0c;方便…...

基于MAX 10 FPGA的Z80与8051双核单板计算机设计与实现

1. 项目概述与核心价值最近在整理工作室的旧物&#xff0c;翻出了一堆老古董——Z80和8051的芯片。看着这些曾经叱咤风云的处理器&#xff0c;一个念头冒了出来&#xff1a;能不能用现代的技术&#xff0c;把它们“复活”在一块板子上&#xff0c;做一个集成的单板计算机&#…...

开源架构企业管理软件适合哪些类型的公司

开源架构企业管理软件适合哪些类型的公司 很多人一听到“开源架构”&#xff0c;第一反应是技术人员、开发者、极客项目。放到企业管理软件里&#xff0c;其实开源架构更像一种长期可控的建设方式&#xff1a;企业能看见系统如何运行&#xff0c;也能在需要时改造它。 对中小…...

通过curl命令快速测试Taotoken平台API连通性与模型列表

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过curl命令快速测试Taotoken平台API连通性与模型列表 基础教程类&#xff0c;本文面向需要快速验证环境或进行排错的开发者&…...

C251编译器变量声明顺序与内存空间指定符详解

1. C251编译器变量声明语法错误解析最近在将8051代码移植到251平台时&#xff0c;遇到一个看似简单却令人困惑的编译错误。当我使用const code int x;这样的变量声明方式时&#xff0c;C251编译器报出了"Error 25: syntax error near int"的错误。这个错误信息看起来…...

【独家实测】ChatGPT-4 Turbo vs GPT-3.5 Turbo单位token成本对比:附Python自动核算脚本(限免24h)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;ChatGPT API价格计算的底层逻辑与成本认知 ChatGPT API 的计费并非基于会话时长或请求次数&#xff0c;而是严格依据模型实际处理的 token 数量——包括输入&#xff08;prompt&#xff09;和输出&#xff08…...