代码随想录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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/71981.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android NDK 开发包,网盘下载,不限速

记录下ndk 开发包的地址&#xff0c;分享给大家。 另外有Android studio的下载包&#xff0c; 在另一篇文章 链接&#xff1a;http://t.csdn.cn/JSr9x Android Studio.exe 下载 2023 最新更新&#xff0c;网盘下载_hsj-obj的博客-CSDN博客 主要是19-25&#xff0c;其他的没有…

CMakeList.txt

CMakeList.txt的写法 前言一个最近写好的CMakeList.txt对上边CMakeList.txt的说明修改 前言 复习一下CMakeList.txt的写法,以下面的一个CMakeList.txt为例 一个最近写好的CMakeList.txt cmake_minimum_required(VERSION 3.17)project(QtVTKProject)# INCLUSION OF Qt # set(…

uni-app 封装api请求

目录 1&#xff0c;封装API请求步骤2&#xff0c;uni-app封装api请求改进 1&#xff0c;封装API请求步骤 在uni-app中封装API请求可以按照以下步骤进行&#xff1a; 创建一个utils文件夹&#xff0c;并在其中创建一个api.js文件&#xff0c;用于存放API请求相关的代码。 在ap…

python开发基础篇1——后端操作K8s API方式

文章目录 一、基本了解1.1 操作k8s API1.2 基本使用 二、数据表格展示K8s常见资源2.1 Namespace2.2 Node2.3 PV2.4 Deployment2.5 DaemonSet2.6 StatefulSet2.7 Pod2.8 Service2.9 Ingress2.10 PVC2.11 ConfigMap2.12 Secret2.13 优化 一、基本了解 操作K8s资源api方式&#xf…

算法通关村-----快速排序的应用

数组中的第K个最大元素 问题描述 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。详见leetcode215 问题分析 之前我们已经使用堆排序/堆查找的…

高等数学刷题

两个公式本质都是相同的 Π/2 1^∞类型

【解决】mysqladmin flush-hosts

问题 mysql出现 mysqladmin flush-hosts&#xff0c;是因为其他客户机连接错误次数过多时&#xff0c;mysql会禁止客户机连接。 解决方法 1、进入服务器数据库&#xff0c;打开数据库命令行界面输入 flush hosts; 此时便可连接 2、可以.修改mysql配置文件&#xff0c;在[…

转 股票触发指定价格发送到 企业微信

[Python源码]股票价格监听并推送-代码狗 import aiohttp,asyncio,json,time,re,os,datetimeclass StockListen:def __init__(self):#定义需要监听的股票代码列表self.stock_list [1.600050,1.601988,1.601288,1.601939]#定义预期价格列表self.expect_price [6.6,3.0,2.7,5]#…

用户促活留存新方式——在APP中嵌入小游戏

随着APP同类产品的不断出现&#xff0c;APP开发者们面临着激烈的竞争&#xff0c;很多APP下载后被新的APP取代&#xff0c;获客成本越来越高。同时开发者还会面临用户粘性差、忠诚度低、用完即走、留存困难&#xff0c;商业化价值被大大缩减。 在APP中植入小游戏来提高用户活跃…

指针的应用与用法

指针的应用场景 从刚才的需求看&#xff0c;指针似乎并不是刚需啊&#xff0c;为什么一定要用指针呢&#xff0c;那么难理解&#xff0c;这是因为有些应用场景非他不可&#xff1a; 1.访问单片机的寄存器&#xff1b; 2.函数调用时内存共享&#xff1b; 3.常用数据结构链表&…

什么是Ubuntu LTS?与常规版本的区别

Ubuntu LTS&#xff08;Long-Term Support&#xff09;是Ubuntu操作系统的一个特殊版本&#xff0c;旨在提供更长时间的支持和稳定性。与常规的Ubuntu版本相比&#xff0c;LTS版本在以下几个方面有所不同&#xff1a; 支持周期更长&#xff1a; 使用Ubuntu LTS版本&#xff0c…

半导体厂务液体泄漏问题的挑战与解决方案

在半导体制造领域&#xff0c;液体泄漏是一项极具挑战性的问题。半导体工厂内有着大量的化学品、工艺液体和废水系统&#xff0c;这些液体在制造过程中扮演着至关重要的角色。然而&#xff0c;液体泄漏可能会导致严重的生产中断、环境污染和安全风险。本文将探讨半导体厂务中的…

【Apollo 自动驾驶】Win11 中 WSL2 安装配置 Apollo 环境

【Apollo 自动驾驶】Win11 中 WSL2 安装配置 Apollo 环境 【1】Win11 WSL2 安装配置 Nvidia Cuda 【1.1】检查计算机硬件的显卡信息 计算机图标右击 -> 管理 -> 设备管理器 -> 显示适配器&#xff1b; 【1.2】检查对应显卡并安装 Nvidia 显卡驱动 下载对应的 Nv…

一点感受

做了两天企业数字化转型的评委&#xff0c;涉及全国最顶级的公司、最顶级的实际落地项目案例&#xff0c;由企业真实的落地团队亲自当面讲解。主要是为了了解了解真实的一线、真实的客户、真实的应用现状和应用水平。 &#xff08;1&#xff09;现状 我评审的涉及底层技术平台&…

Docker进入容器出现:bash: vi: command not found

&#x1f388;1 参考文档 docker基础容器中bash: vi: command not found问题解决 | 你邻座的怪同学-CSDN &#x1f50d;2 问题描述 在使用 Docker 容器时&#xff0c;有时候里边没有安装vim&#xff0c;敲vim命令时提示说&#xff1a;vim: command not found。 这个时候就需要…

pytorch学习——循环神经网络RNN讲解及其实现

参考书籍&#xff1a;8.6. 循环神经网络的简洁实现 — 动手学深度学习 2.0.0 documentation 参考视频&#xff1a;54 循环神经网络 RNN【动手学深度学习v2】_哔哩哔哩_bilibili 一.介绍 循环神经网络RNN&#xff08;Recurrent Neural Network &#xff09;是一类广泛应用于序列…

Xilinx IDDR与ODDR原语的使用

文章目录 ODDR原语1. OPPOSITE_EDGE 模式2. SAME_EDGE 模式 ODDR原语 例化模板&#xff1a; ODDR #(.DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE" or "SAME_EDGE" .INIT(1b0), // Initial value of Q: 1b0 or 1b1.SRTYPE("SYNC…

`Executor` 接口

Executor 接口是 Java 并发编程中的一个基础接口,用于表示能够执行任务的对象。它是一个功能非常简单的接口,只定义了一个方法 void execute(Runnable command),用于执行传递给它的 Runnable 任务。 以下是 Executor 接口的简单定义: public interface Executor { void e…

css transition属性

如果想实现一些效果&#xff1a;比如一个div容器宽高拉伸效果&#xff0c;或者一些好看的有过渡的效果可以使用 定义和用法 transition 属性是一个简写属性&#xff0c;用于设置四个过渡属性&#xff1a; transition-property transition-duration transition-timing-func…

学习微信小程序 Westore

最近&#xff0c;接到小程序需求&#xff0c;并且是在以前公司老项目上改造&#xff0c;打开项目&#xff0c;发现却不是我想象中的那样&#xff0c;不是上来就是 Page({})&#xff0c;而是create(store,{})&#xff0c;纳尼&#xff1f;&#xff1f;&#xff1f;这什么玩意&am…