代码随想录训练营 DP

2023-09-19 09:59:18

今天整理的东西都放在注释里了

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

给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。
每步 可以删除任意一个字符串中的一个字符。

代码

func minDistance(w1 string, w2 string) int {
    //删除
    //dp[i][j] == 以i-1 结尾的字符串word1,j-1结尾的字符串word2,想要相等所需要删除的最少次数
    // w1[i-1] == w2[j-1] ==> dp[i][j] = dp[i-1][j] 
    // w1[i-1] != w2[j-1] ==> 
    //                          1、 dp[i][j] == dp[i-1][j] + 1
    //                          2、 dp[i][j] == dp[i][j-1]  + 1
    //                          3、 dp[i][j] == dp[i-1][j-1] + 2
    // min(1,2,3) 
    // 同时删word1[i - 1]和word2[j - 1],dp[i][j-1] 就不需要 word2[j - 1]
    //初始化:dp[i][0] dp[0][j] 需要初始化
    //dp[i][0]:word2为空字符串,以i-1为结尾的字符串word1要删除多少个元素,才能和word2相同呢,很明显dp[i][0] = i。dp[0][j]的话同理

    //遍历顺序 根据递推公式来看
    dp:=make([][]int,len(w1)+1)
    for i:=0;i<len(dp);i++{
        dp[i]=make([]int,len(w2)+1)
    }

    for i:=0;i<len(dp);i++{
        dp[i][0]=i
    }
    for i:=0;i<len(dp[0]);i++{
        dp[0][i]=i
    }

    for i:=1;i<len(dp);i++{
        for j:=1;j<len(dp[i]);j++{
            if w1[i-1] ==w2[j-1]{
                dp[i][j]=dp[i-1][j-1]
            }else{
                dp[i][j] = min(min(dp[i-1][j]+1, dp[i][j-1]+1),dp[i-1][j-1]+2)
            }
        }
    }
    return dp[len(dp)-1][len(dp[0])-1]
}

func min(a, b int) int{
    if a>b{
        return b
    }
    return a
}

72. 编辑距离🌸

代码

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符

func minDistance(w1 string, w2 string) int {
    //dp[i][j]:= 以下标i-1 j-1 结尾的字符串的最近编辑距离
    // if(w1[i-1]) == w2(j-1) dp[i][j] = dp[i - 1][j - 1]
    // if(w1[i-1]) != w2(j-1) add delete update
    // delete dp[i][j]  = i-2 与j-1 比较  = dp[i-1][j] +1
    // word2添加一个元素,相当于word1删除一个元素
    //dp[i][j] = dp[i][j - 1] + 1
    //替换元素,word1替换word1[i - 1],使其与word2[j - 1]相同,此时不用增删加元素。
    //dp[i][j] = dp[i - 1][j - 1] + 1;
    l1,l2:=len(w1),len(w2)
    dp:=make([][]int,l1+1)
    for i:= range dp{
        dp[i] = make([]int,l2+1)
    }

    for i:=0;i<l1+1;i++{
        dp[i][0] =i
    }
    for j:=0;j<l2+1;j++{
        dp[0][j] = j
    }
    for i:=1;i<l1+1;i++{
        for j:=1;j<l2+1;j++{
            if w1[i-1] == w2[j-1]{
                dp[i][j] = dp[i-1][j-1]
            }else{
                dp[i][j] = min(dp[i][j-1],dp[i-1][j],dp[i-1][j-1]) +1
            }
        }
    }
    return dp[l1][l2]
}
func min(args ...int) int {
	min := args[0]
	for _, item := range args {
		if item < min {
			min = item
		}
	}
	return min
}
更多推荐

基于Java的设计模式 - 代理模式

代理模式是一种使用代理对象来执行目标对象的方法并在代理对象中增强目标对象方法的一种设计模式。简单来讲就是在不修改目标对象的基础上,增强主业务逻辑的设计模式。代理模式基本可分为三种静态代理JDK动态代理CGLIB动态代理上述简单分就是静态和动态代理,静态代理即程序运行之前已创建了代理类,动态代理是程序运行时通过反射机制动

幸福里基于 Flink & Paimon 的流式数仓实践

摘要:本文整理自字节跳动基础架构工程师李国君,在StreamingLakehouseMeetup的分享。幸福里业务是一种典型的交易、事务类型的业务场景,这种业务场景在实时数仓建模中遇到了诸多挑战。本次分享主要介绍幸福里业务基于Flink&Paimon构建流式数仓的实践经验,从业务背景、流批一体数仓架构、实践中遇到的问题

新能源汽车驱动电机的基本知识

学习目标:了解电机的基本知识。能力目标:培养学生搜集和整理相关资料的能力。素质目标:培养学生良好的职业素养。额定电店.在夫见定条件下电池工作的*于佳电压知识准备术语和定义。(1)驱动电机系统通过有效的控制策略将动力蓄电池提供的直流电转化为交流实现电机的正转以及反转控制。在减速/制动时将电机发出的交流电转化为直流电,将能

APEX数据源加载实现Excel表数据导入及自定义存储过程

在APEX应用程序中会涉及到数据加载,说白了就是导入导出数据到数据库中,这里就以Excel导入数据到TEST_DATA_WXX表为例,来学习共享组件数据源数据加载定义1第一步先导出一个数据模板进入《王小小鸭的学习demo》打开【用户管理】-【操作】-【下载】-【Excel】下载后的Excel数据表是这样的↓2.建表TE

【Linux】基础IO,软硬链接,动静态库

1.认识IO什么是IOI/O简单来说对应的就是两个单词Input和Output,指的是计算机系统与外部环境(通常是硬件设备或其他计算机系统)之间的数据交换过程I/O可以分为两种主要类型:输入(Input):输入是指计算机系统接收来自外部环境的数据或信息的过程。例如,当用户在键盘上输入文本时,这些输入字符被视为输入操作。

9.21号作业

实现把注册的信息导入数据库中second.h#ifndefSECOND_H#defineSECOND_H#include<QWidget>#include<QDebug>namespaceUi{classSecond;}classSecond:publicQWidget{Q_OBJECTpublic:voidnewsl

IT运维:使用数据分析平台监控Windows Eventlog

TIPS:本文鸿鹄版本:2.10.0及以上版本概述本文基于《IT运维:利用鸿鹄采集Windowseventlog数据》(以下简称原文)文章进行了细化与延伸。主要包括细化了安装步骤,增加了仪表板。鸿鹄端配置创建数据集与数据源类型登录鸿鹄提前创建数据集和数据类型,我这里创建的是winlog数据集,下文《安装vector》里

埃文科技受邀出席“安全堤坝”技术论坛

2023年9月11日,2023年国家网络安全宣传周河南省活动开幕式暨河南省网络文明大会在开封博物馆开幕。由CCFYOCSEF郑州举办的“聚焦数据交易监管技术,筑牢数据交易‘安全堤坝’”技术论坛在开封市博物馆二楼会议厅举行。埃文科技总经理王永博士与副总经理武可嘉受邀出席,发表演讲并参与思辨讨论。埃文科技王永博士从“数据流

数据分析思维-分析方法(基础)

数据分析的基础方法概念理解,其关键在于在业务中锻炼数据分析思维。(将以下基础方法带有好奇心的应用在生活中练习数据分析思维)例如:经典的啤酒与尿布(分析一个爸爸去超市买东西的行为,将尿布和啤酒放在一起)例如:分析夜市上100家店那些营业高、利润经营类型等等主要是养成数据分析的思维,可应用工作、生活日常的方方面面。1.象限

Java学习笔记39——网络编程03

TCP通信程序TCP通信程序TCP通信原理TCP发送数据的步骤TCP接收数据的步骤TCP通讯程序练习练习1练习2练习3练习4练习5练习6TCP通信程序TCP通信原理TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通

URL与URI小结

文章目录一、URL是什么?URL的一般形式:二、分类三、URI总结一、URL是什么?每条由Web服务器返回的内容都是和它管理的某个文件相关联的,这些文件中的每一个都有一个唯一的名字,叫做URL(通用资源定位符),是互联网上一种资源的地址。例如:http://www.google.com:80/index.htmlURL

热文推荐