代码随想录| 编辑距离
判断子序列[https://leetcode.cn/problems/is-subsequence/description/]
题意:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
思路:从动态规划, dp[i][j] 表示s的前i-1个元素和t的前j-1个元素相同的子序列元素的个数。
还要对dp初始化。dp[i][0] 表示在t空串的情况下,s的前i-1个字符串的相等的情况。 都设为0 ; dp[0][j] 表示在s为空串的情况下与s的前j-1个字符串相等的情况。
状态转移:
if(s[i-1] == t[j-1])
dp[i][j] = dp[i-1][j-1] +1 ; // 表示 个数加1 。
else
dp[i][j] = dp[i][j-1] ; // 表示现在的状态是s的前一个元素的状态。
不同子序列
题意:两个字符串s, t 统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 109 + 7 取模。
思路:dp[i][j] 表示在s的前i-1个字符的情况下,t的前j-1个字符出现的次数。
dp初始化:dp[i][0] 表示s的前i-1个字符,t空串出现的次数为1 。
dp[0][j]= 0 表示s为空串的情况 , t串出现的次数为0 。
因为有这样的例子: s:bagg 和 t:bag ,s[3] 和 t[2]是相同的,但是字符串s也可以不用s[3]来匹配,即用s[0]s[1]s[2]组成的bag。
dp[i][j] = dp[i-1][j-1] + dp[i-1][j] ; // 由s的上一个字符来达到。
动态转移:
if(s[i-1] == t[j-1])
// 分别由上一个迭代的dp[i][j] 的个数和dp[i-1][j]表示删除掉s的当前遍历元素的个数组成。
dp[i][j] = dp[i-1][j-1] + dp[i-1][j] ;
else
dp[i][j] = dp[i-1][j] ;
代码
class Solution {
public:int numDistinct(string s, string t) {const int N = 1e3+10 ;// 可以映射为删除s的元素的方式使得s最后与t相等的个数vector<vector<uint64_t >> dp(s.size()+10 , vector<uint64_t>(t.size() + 10 , 0)) ; // dp[i][j] 表示在s的前i-1的子串(子序列)出现t的前j-1个子串的个数。 for(int i = 0 ; i < s.size() ;++ i){dp[i][0] = 1; // 表示s的前i-1个子串,如何删除达到空字符串。 }// dpfor(int j = 1 ; j < t.size() ; ++ j ){dp[0][j] = 0 ; // 表示空字符串无论如何删除都达到不了j的状态。 }for(int i=1 ; i<= s.size() ; ++ i)for(int j = 1 ; j <= t.size() ;++ j){if(s[i-1] == t[j-1]){dp[i][j] = dp[i-1][j-1] +dp[i-1][j] ; // 分别由上一个迭代的dp[i][j] 的个数和dp[i-1][j]表示删除掉s的当前遍历元素的个数组成。 }else{dp[i][j] = dp[i-1][j] ; }}for(int j = 0 ; j <= 3 ; ++ j){for(int i = 0 ; i <= 7 ; ++i){cout<<dp[i][j]<<" " ; }cout<<endl ; }return dp[s.size()][t.size()] ; }
};
两个字符串的删除操作
题意:给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。
思路:dp[i][j] 表示word1在i-1和word2在j-1之前相同的最小步数。
动态转移:
当word1[i-1] == word2[j-1]
dp[i][j] = dp[i-1][j-1] ;
当word1[i-1] != word2[j-1]
dp[i][j] = min (dp[i-1][j] +1 , dp[i][j-1]+1 , dp[i-1][j-1] +2 ) ; // 包括删除word1这个i元素, 等于dp[i-1][j] 的状态 +1 加一表示加上删除操作。 dp[i][j-1] +1 ; 和表示dp[i-1][j] +1 和两个字符串 都要删除自己末尾的元素。
代码
class Solution {
public:int minDistance(string word1, string word2) {vector<vector<uint64_t>> dp(word1.size()+10, vector<uint64_t>(word2.size()+10 , 0 )) ; // dp[i][j] 表示使word1的前i-1字符和word2的前j-1个字符的最小步数。 for(int i = 0 ; i <= word1.size() ; ++ i){dp[i][0] = i ; // 步数是i+1 删除i个字符串。 可以达到word2为空的状态。 }for(int j = 0 ; j <= word2.size() ; ++ j){dp[0][j] = j ; // 步数是j+1 ; 删除j个字符串, 可以达到word1为空的状态}for(int i = 1 ; i <= word1.size() ; ++ i)for(int j = 1 ; j <= word2.size() ; ++ j){if(word1[i-1] == word2[j-1]){dp[i][j] = dp[i-1][j-1] ; }else{dp[i][j] = min (dp[i-1][j] +1 ,min( dp[i][j-1] +1 , dp[i-1][j-1] +2 ) ) ; // 是要在dp[i-1 ] [j] 的状态下加1 。 和dp[i][j-1] 的状态下加1 或者 dp[i-1][j-1]的状态下加2中选一个最小的。 }}return dp[word1.size()][word2.size()] ; }
};
以上几个题是为最短编辑距离服务的
最短编辑距离:
给定两个单词word1和word2 。请返回将 word1 转换成 word2 所使用的最少操作数 。
- word2添加一个元素,相当于word1删除一个元素,例如 word1 = “ad” ,word2 = “a”,word2添加一个元素d,也就是相当于word1删除一个元素d,操作数大小一样!
思路:
dp[i][j] 表示在word1在i-1之前和 word2在j-1之前的最少操作次数。
如果word1[i-1] == word2[j-1] ; 那么
dp[i][j] =dp[i-1][j-1] ;
否则
dp[i][j] = min(dp[i-1][j] +1, dp[i][j-1] +1 , dp[i-1][j-1] +1 ) ; ; // dp[i-1][j-1] +1 表示修改 。
return dp[word1.size() ][word2.size()] ;
相关文章:
代码随想录| 编辑距离
判断子序列[https://leetcode.cn/problems/is-subsequence/description/] 题意:给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 思路:从动态规划, dp[i][j] 表示s的前i-1个元素和t的前j-1个元素相同的子序列元素的个数。 还要对d…...
MOJO编程语言的编译与执行:深入编译器与解释器的工作原理
引言 MOJO编程语言以其面向对象的特性和简洁的语法而受到开发者的欢迎。在MOJO的世界中,编译器和解释器是两个核心组件,它们负责将MOJO代码转换为机器可执行的指令。本文将探讨MOJO编译器和解释器的工作原理,以及它们如何在MOJO编程过程中发…...
nginx-限制客户端并发数
文章目录 前言一、ngx_http_limit_conn_module二、指令介绍1. limit_conn_zone2.limit_conn3. limit_conn_log_level4. limit_conn_status 案例未限制限制 总结 前言 瞬时大量用户访问服务器,导致服务器超载而宕机。 恶意请求攻击服务器,导致服务器超载…...
Vatee万腾平台:智能生活的新选择
在科技飞速发展的今天,智能生活已经不再是遥不可及的梦想,而是逐渐渗透到我们日常生活的方方面面。Vatee万腾平台,作为智能科技领域的佼佼者,正以其创新的技术、丰富的应用场景和卓越的用户体验,成为智能生活的新选择&…...
白嫖A100-interLM大模型部署试用活动,亲测有效-2.Git
申明 以下部分内容来源于活动教学文档: Docs git 安装 是一个开源的分布式版本控制系统,被广泛用于软件协同开发。程序员的必备基础工具。 常用的 Git 操作 git init 初始化一个新的 Git 仓库,在当前目录创建一个 .git 隐藏文件夹来跟踪…...
LeetCode 60.排序排列(dfs暴力)
给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n 3 时, 所有排列如下: "123""132""213""231""312""321" 给定…...
矩阵分析与应用1-矩阵代数基础
矩阵分析与应用1-矩阵代数基础 1 矩阵的基本运算2 矩阵的初等变换3 向量空间、线性映射与Hilbert空间4 内积与范数5 随机向量6 矩阵的性能指标7 逆矩阵与伪逆矩阵8 Moore-Penrose逆矩阵9 矩阵的直和与Hadamard积10 Kronecker积与Khatri-Rao积11 向量化与矩阵化12 稀疏表示与压缩…...
Vue的学习之生命周期
一、生命周期 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>Vue的学习</title><script src"vue.js" type"text/javascript" charset"utf-8"></script></head>&l…...
【MySQL】表的操作{创建/查看/修改/删除}
文章目录 1.创建表1.1comment:注释信息1.2存储引擎 2.查看表3.修改表3.1add添加列,对原数据无影响3.2drop删除列3.3modify修改列类型3.4change修改列名3.5rename [to]修改表名 4.删除表5.总结 1.创建表 CREATE TABLE table_name (field1 datatype,field…...
基于Python爬虫的城市二手房数据分析可视化
基于Python爬虫的城市二手房数据分析可视化 一、前言二、数据采集(爬虫,附完整代码)三、数据可视化(附完整代码)3.1 房源面积-总价散点图3.2 各行政区均价3.3 均价最高的10个小区3.4 均价最高的10个地段3.5 户型分布3.6 词云图四、如何更换城市一、前言 二手房具有价格普…...
这款新的 AI 语音助手击败了 OpenAI,成为 ChatGPT 最受期待的功能之一
OpenAI 推迟了 ChatGPT 令人印象深刻的语音模式,这让许多 AI 聊天机器人的粉丝感到不安,但他们现在可能已经被挖走了。法国人工智能开发商 Kyutai 推出了一款名为 Moshi 的实时语音 AI 助手。 Moshi 旨在通过语音(如 Alexa 或 Google Assista…...
CTS单测某个模块和测试项
1 ,测试单个模块命令 run cts -m <模块名> 比如:run cts -m CtsUsbTests模块名可以从测试报告中看,如下: 2, 测试单个测试项 run cts -m <模块名> -t <test_name> 比如:run cts -m ru…...
pytorch、pytorch_lightning、torchmetrics版本对应
目录 1.pytorch_lightning对应版本安装 2.PyTorch Lightning介绍 PyTorch Lightning 的作用: PyTorch Lightning 的基本用法: 报错:ModuleNotFoundError: No module named pytorch_lightning 这种报错一看就是缺了pytorch_lightning包&am…...
麒麟系统部署JeecgBoot
一、安装jdk 自带的即可,不必另外安装 二、安装MySQL 麒麟系统安装MySQL_麒麟系统安装万里数据库步骤-CSDN博客 三、安装Redis 麒麟系统安装Redis_麒麟上redis-CSDN博客 四、安装Nginx 1、下载 下载地址:https://redis.io/ 2、解压配置 tar .…...
要想贵人相助,首先自己得先成为贵人!
点击上方△腾阳 关注 转载请联系授权 在金庸江湖里,有两位大侠,一个是萧峰,一个是郭靖。 郭靖在《射雕英雄传》里是绝对的主角,在《神雕侠侣》当中也是重要的配角,甚至可以说是第二主角。 谈起郭靖,很多…...
使用块的网络 VGG
一、AlexNet与VGG 1、深度学习追求更深更大,使用VGG将卷积层组合为块 2、VGG块:3*3卷积(pad1,n层,m通道)、2*2最大池化层 二、VGG架构 1、多个VGG块后接全连接层 2、不同次数的重复块得到不同的架构&a…...
微信小程序性能与体验优化
1. 合理的设置可点击元素的响应区域大小; 比较常见的是页面的点击按钮太小,用户点击不到按钮,这样用户体验很不好。 2. 避免渲染页面耗时过长; 当页面渲染时间过长的话,会让用户感觉非常卡顿,当出现这种…...
Android14之获取包名/类名/服务名(二百二十三)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...
FreeU: Free Lunch in Diffusion U-Net——【代码复现】
这篇文章发表于CVPR 2024,官网地址:ChenyangSi/FreeU: FreeU: Free Lunch in Diffusion U-Net (CVPR2024 Oral) (github.com) 一、环境准备 提前准备好python、pytorch环境 二、下载项目依赖 demo下有一个requirements.txt文件, pip inst…...
第三方商城对接重构(HF202407)
文章目录 项目背景一、模块范围二、问题方案1. 商品模块整体来说这块对接的不是太顺利,梳理了几条大概的思路: 2. 订单模块3. 售后4. 发票5. 结算单 经验总结 项目背景 作为供应商入围第三方商城成功,然后运营了一段时间,第三方通…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...
C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...
