Day 5:583 两个字符串的删除操作

news2025/11/5 5:18:22

583 两个字符串的删除操作

  • 1. 题目描述
  • 2. 解题思路
  • 3. 代码实现

1. 题目描述

583 两个字符串的删除操作

2. 解题思路

动态规划的思想:
(1) 记f[i][j]为表示使word1[0:i]word2[0:j]相同的最少删除次数;
(2) 当i=0j=0时,动态规划的边界表达式如下所示:
f [ i ] [ 0 ] = i , if  0 ≤ i ≤ n 1 f [ 0 ] [ j ] = j , if  0 ≤ j ≤ n 2 f[i][0]=i, \quad \text{if } 0 \leq i \leq n_1 \\ f[0][j]=j, \quad \text{if } 0 \leq j \leq n_2 f[i][0]=i,if 0in1f[0][j]=j,if 0jn2
(3) 当i>0j>0时,动态规划的表达式如下所示:
f [ i ] [ j ] = { f [ i − 1 ] [ j − 1 ] , if  w o r d 1 [ i − 1 ] = w o r d 2 [ j − 1 ] min ⁡ ( f [ i − 1 ] [ j ] , f [ i ] [ j − 1 ] ) + 1 , if  w o r d 1 [ i − 1 ] ≠ w o r d 2 [ j − 1 ] f[i][j] = \begin{cases} f[i - 1][j - 1], & \text{if } word1[i - 1] = word2[j - 1] \\ \min(f[i - 1][j], f[i][j - 1]) + 1, & \text{if } word1[i - 1] \neq word2[j - 1] \end{cases} f[i][j]={f[i1][j1],min(f[i1][j],f[i][j1])+1,if word1[i1]=word2[j1]if word1[i1]=word2[j1]
可以利用1143 最长公共子序列逆向求解。

3. 代码实现

class Solution {
public:
    int minDistance(string word1, string word2) {
        int n1 = word1.size();
        int n2 = word2.size();
        vector<vector<int>> f(n1 + 1, vector<int>(n2 + 1));
        for (int i = 1; i <= n1; i++) {
            f[i][0] = i;
        }
        for (int j = 1; j <= n2; j++) {
            f[0][j] = j;
        }
        for (int i = 1; i <= n1; i++) {
            for (int j = 1; j <= n2; j++) {
                if (word1[i - 1] == word2[j - 1]) {
                    f[i][j] = f[i - 1][j - 1];
                } else {
                    f[i][j] = min(f[i - 1][j], f[i][j - 1]) + 1;
                }
            }
        }
        return f[n1][n2];
    }
};

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

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

相关文章

【MySQL 14】用户管理

文章目录 &#x1f308; 一、用户管理⭐ 1. 用户信息⭐ 2. 创建用户⭐ 3. 修改密码⭐ 4. 删除用户 &#x1f308;二、数据库的权限⭐ 1. 权限列表⭐ 2. 查看权限⭐ 3. 授予权限⭐ 4. 回收权限 &#x1f308; 一、用户管理 MySQL 也会区分普通用户和超级用户。如果只是访问某一…

centos基础设置

1.设置网络 # 配置网络 vi /etc/sysconfig/network-scripts/ifcfg-ens33 #将里面的onboard设置为yes 2.修改计算机名 使用命令行&#xff1a; 打开终端。 使用 hostnamectl 命令可以直接修改主机名。例如&#xff0c;如果您想将主机名更改为 mynewhostname&#xff0c;您可以使…

selenium(一)基于java、元素定位

Selenium自动化 Selenium是一个用于Web应用程序的自动化测试工具。它直接运行在浏览器中&#xff0c;可以模拟用户在浏览器上面的行为操作。 chrome下载 https://www.google.com/chrome/ 下载的结果是 “ChromeSetup.exe”&#xff0c;双击该文件&#xff0c;安装程序会自…

selenium(二)基于java、元素操控、Frame切换、元素等待

元素操控 选择到元素之后&#xff0c;我们的代码会返回元素对应的 WebElement对象&#xff0c;通过这个对象&#xff0c;我们就可以 操控 元素 输入sendKeys 项目实战&#xff1a;在网银环境下载流水[交易明细]的时候&#xff0c;需要指定查询日期&#xff0c;有些银行是可以…

一个简单的CRM客户信息管理系统,提供客户,线索,公海,联系人,跟进信息和数据统计功能(附源码)

前言 在当今快速发展的商业环境中&#xff0c;企业管理面临着种种挑战&#xff0c;尤其是如何有效管理和维护客户关系成为了一个关键问题。现有的一些处理方案往往存在功能分散、操作复杂、数据孤岛等痛点&#xff0c;这不仅影响了工作效率&#xff0c;也难以满足企业对客户关…

仿华为车机功能之--修改Launcher3,实现横向滑动桌面空白处切换壁纸

本功能基于Android13 Launcher3 需求:模仿华为问界车机,实现横向滑动桌面空白处,切换壁纸功能(本质只是切换背景,没有切换壁纸)。 实现效果: 实现思路: 第一步首先得增加手势识别 第二步切换底图,不切换壁纸是因为切换壁纸动作太大,需要调用到WallpaperManager,耗…

【赵渝强老师】构建Docker Swarm集群

在了解了Docker Swarm的体系架构以后&#xff0c;基于已经部署好三台虚拟主机便可以非常容易地构建Swarm集群。下表列出了这三台虚拟机的相关信息。其中&#xff1a;master主机将作为Swarm Manager运行&#xff1b;而node1和node2将作为Swarm Node运行。 视频讲解如下&#xf…

nacos 动态读取nacos配置中心项目配置

实现了项目稳定运行情况下不需要在项目中改配置&#xff0c;直接在nacos中修改更方便。 pom文件&#xff1a; <!--读取bootstrap文件--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap…

大数据测试怎么做,数据应用测试、数据平台测试、数据仓库测试

本期内容由中通科技高级质量工程师龙渊在公益讲座中分享&#xff0c;他从大数据测试整体介绍、数据应用测试、数据平台测试以及数据仓库测试等方面&#xff0c;与大家共同探讨了大数据测试的方法实施与落地。 以下是讲座正文&#xff1a; 今天我们分享的内容主要从大数据简介…

阿里云Ubuntu系统安装/简单使用Kafka

一、安装kafka 1.下载安装包 1.1下载地址 https://kafka.apache.org/downloads 注意&#xff1a; 版本可以随意选择&#xff0c;我们选择版本为2.4.1 2.压缩文件上传/解压 2.1上传 2.2解压文件 #解压文件指令 tar -zxvf kafka_2.12-2.4.1.tgz -C /export/server/ #创建软…

py_gif制作

from PIL import Image import moviepy.editor as mp import os# 1. 定义函数 resize_frame&#xff0c;用于调整视频帧的大小 def resize_frame(frame, max_size240):img Image.fromarray(frame)img img.resize((max_size, max_size), Image.Resampling.LANCZOS) # 使用 LA…

【Java】—— Java面向对象基础:Java中如何创建和使用三角形类(TriAngle)来计算面积

目录 第一步&#xff1a;定义TriAngle类 第二步&#xff1a;编写TriAngleTest测试类 运行程序 总结 在Java编程中&#xff0c;面向对象的编程思想是一种非常强大的工具&#xff0c;它允许我们将现实世界中的实体&#xff08;如三角形&#xff09;抽象成程序中的类&#xff…

c++关于字符串的练习

提示并输入一个字符串&#xff0c;统计该字符串中字母个数、数字个数、空格个数、其他字符的个数 #include <iostream> #include<string> using namespace std;int main() {string s1;int letter0,digit0,space0,other0;cout<<"请输入一个字符串:"…

redis学习笔记 ——redis中的四大特殊数据结构

一.前言 在之前的学习中&#xff0c;我们已经介绍了Redis中常见的五种基本的数据结构&#xff0c;而今天我们就要开始介绍Redis的四种特殊的数据结构&#xff0c;它们分别是bitmap(位图)&#xff0c; HyperLogLog(基数统计),Geospatial(地理信息),Stream。 二.位图(Bitmap) …

springboot+vue+mybatis计算机毕业设计电子产品交易系统+PPT+论文+讲解+售后

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对电子产品交易管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”…

并发高负载场景下的负载均衡优化方案

并发高负载场景下&#xff0c;负载均衡优化技术 负载均衡是一种计算机技术&#xff0c;主要用于在多个计算机(如计算机集群)、网络连接、CPU、硬盘驱动器或其他资源中分配工作负载。 其主要目标是优化资源使用、最大化吞吐率、最小化响应时间&#xff0c;同时避免任何一个资源的…

跨境电商避坑指南:如何在亚马逊和速卖通安全进行测评补单

大家好&#xff0c;近期&#xff0c;不少从事跨境电商的朋友纷纷向我求助&#xff0c;他们在执行测评补单时频繁遭遇支付难题&#xff0c;如支付失败、支付成功后订单被取消&#xff0c;更有甚者&#xff0c;账号遭遇封禁。许多朋友误以为这仅仅是支付卡的问题&#xff0c;但实…

【生信分析常用软件】plink常用功能之翻转正负链(--flip)

官网:PLINK 1.9 plink --bfile plink --flip flip.txt --make-bed --out test 当不同数据合并时&#xff0c;如果一个数据使用正链&#xff0c;另外一个数据使用反链&#xff0c;就会导致合并数据出现问题&#xff0c;报错。 这种时候方案一&#xff1a;舍弃所有不能合并位点&…

【图像去噪】论文复现:代替ReLU!Pytorch实现即插即用激活函数模块xUnit,并插入到DnCNN中实现xDnCNN!

请先看【专栏介绍文章】&#xff1a;【图像去噪&#xff08;Image Denoising&#xff09;】关于【图像去噪】专栏的相关说明&#xff0c;包含适配人群、专栏简介、专栏亮点、阅读方法、定价理由、品质承诺、关于更新、去噪概述、文章目录、资料汇总、问题汇总&#xff08;更新中…

keil添加芯片包

找到.pack将其移动到KEIL的文件路径下 双击Keil.STM32F1xx_DFP.2.4.1.pack&#xff0c;点击【Next>>】&#xff0c;开始安装芯片支持包 重新打开keil5&#xff0c;打开任意的工程&#xff0c;点击工具栏的魔术棒按钮 选择Device&#xff0c;可以看到STM32F1系列芯片已经被…