day57--动态规划15

  •  392.判断子序列 
  •  115.不同的子序列  

第一题:判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。

字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。

示例 1:

  • 输入:s = "abc", t = "ahbgdc"
  • 输出:true

1、动态规划五部曲

(1)确定dp数组以及下标的含义

dp[i][j]表示以下标i-1为结尾的字符串s,和下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]

(2)确定递推公式

if(s[i-1]==t[j-1]) 

t中找到了一个字符在s中也出现了

if(s[i-1]!=t[j-1])

相当于当前对应元素不相同,t需要删除元素,跳到下一个元素进行匹配

if(s[i-1]==t[j-1]) 那么dp[i][j]=dp[i-1][j-1] +1;  在上一次满足条件的长度情况下加1

if(s[i-1]!=t[j-1])  此时t要删除元素,t如果把当前元素t[j-1]删除,那么dp[i][j]的数值就是看s[i-1]和t[j-2]的比较结果,即dp[i][j]=dp[i][j-1]

(3)dp数组如何初始化

 dp[i][0]肯定是没有匹配成功的值,所以为0

同理,dp[0][j]也为0

(4)确定遍历顺序

dp[i][j]依赖于dp[i-1][j-1]和dp[i][j-1],所以从前到后遍历,先遍历s数组,然后遍历t数组

(5)举例推导

第二题:不同的子序列

给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。

字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)

题目数据保证答案符合 32 位带符号整数范围。

0、问题是问在字符串s中有多少种取出字符串t的方法

动态规划五部曲:

(1)确定dp数组以及下标的含义

dp[i][j]:以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]

(2)确定递推公式

s[i-1]与t[j-1]相等

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]  ,也就是等于以i-2为结尾的s子序列中出现j-1为结尾的t序列的个数

(3)dp数组初始化

dp[i][0]和dp[0][j]需要进行初始化

dp[i][0] 表示:以i-1为结尾的s可以随便删除元素,出现空字符串的个数。

那么dp[i][0]一定都是1,因为也就是把以i-1为结尾的s,删除所有元素,出现空字符串的个数就是1。

再来看dp[0][j],dp[0][j]:空字符串s可以随便删除元素,出现以j-1为结尾的字符串t的个数。

那么dp[0][j]一定都是0,s如论如何也变成不了t。

最后就要看一个特殊位置了,即:dp[0][0] 应该是多少。

dp[0][0]应该是1,空字符串s,可以删除0个元素,变成空字符串t。

(4)确定遍历顺序

dp[i][j]=dp[i-1][j-1]+dp[i-1][j]或者dp[i][j]=dp[i-1][j]都是根据左上方和右上方推导出来

外层遍历s数组,内层遍历t数组

(5)举例推导

int numDistinct(string s, string t) {vector<vector<uint64_t>> dp(s.size()+1,vector<uint64_t> (t.size()+1));for(int i=0;i<s.size();i++) dp[i][0]=1;for(int j=1;j<t.size();j++) dp[0][j]=0;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];}else {dp[i][j]=dp[i-1][j];}}}return dp[s.size()][t.size()];}

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

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

相关文章

Redis的四种部署方案

这篇文章介绍Reids最为常见的四种部署模式&#xff0c;其实Reids和数据库的集群模式差不多&#xff0c;可以分为 Redis单机模式部署、Redis主从模式部署、Redis哨兵模式部署、Cluster集群模式部署&#xff0c;其他的部署方式基本都是围绕以下几种方式在进行调整到适应的生产环境…

关于 MapboxGL 在 Vue 中的简单使用

前言问题 关于我为什么使用了 在线的 js引入方法&#xff0c;而不是使用 npm 直接下载依赖问题&#xff0c;之前有一篇文章讲过原因&#xff1a;关于 Vue-iClient-MapboxGL 的使用注意事项 网上提供的 vue-iclient-mapboxgl 比较多&#xff0c;但是我这里使用的是 iclient-su…

图扑 HT for Web 手机端运维管理系统

随着信息技术的快速发展&#xff0c;网络技术的应用涉及到人们生活的方方面面。其中&#xff0c;手机运维管理系统可提供数字化、智能化的方式&#xff0c;帮助企业和组织管理监控企业的 IT 环境&#xff0c;提高运维效率、降低维护成本、增强安全性、提升服务质量&#xff0c;…

2021-arxiv-GPT Understands, Too

2021-arxiv-GPT Understands, Too Paper&#xff1a; https://arxiv.org/abs/2103.10385 Code&#xff1a; https://github.com/THUDM/P-tuning Prompt 简单理解 举例来讲&#xff0c;今天如果有这样两句评论&#xff1a; 1. 什么苹果啊&#xff0c;都没有苹果味&#xff0c…

zabbix6.4监控centos

1、关闭防火墙 setenforce 0 #关闭SELinux sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config #设置永久关闭SELinux systemctl stop firewalld.service #关闭防火墙 systemctl disable firewalld.service …

python脚本-读取shadow关键信息并爆破密码

python脚本-读取shadow关键信息并爆破密码 代码 import crypt from colorama import Fore,Styledef crack():# 密码爆破函数定义with open(/root/top1000.txt) as f:# 此处更改密码字典for passwd in f:passwd2crypt.crypt(passwd.strip(),salt)if passwd2 passwd_hash:prin…

黄金矿工小游戏

欢迎来到程序小院 黄金矿工 玩法&#xff1a;点击开始游戏&#xff0c;黄金和钩子&#xff0c;钩子会左右摆动&#xff0c;对准黄金位置点击鼠标左键钓起黄金加对应时间&#xff0c;钓起黑色四块减去响应时间&#xff0c;快去挖矿吧^^。开始游戏https://www.ormcc.com/play/ga…

k8s-调度约束

目录 工作机制 调度过程 指定调度节点 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件&#xff0c;向 APIServer 发送命令&#xff0c;在 Node 节点上面…

PyGame:Python 游戏编程入门

一、说明 当我在上个世纪末开始学习计算机编程时&#xff0c;我的愿望是编写计算机游戏。我试图弄清楚如何在我学到的每种语言和每个平台上编写游戏&#xff0c;包括 Python。这就是我发现pygame并学习如何使用它来编写游戏和其他图形程序的方式。当时&#xff0c;我真的很想要…

2023世界传感器大会即将开启,汉威科技向全球发出邀请

由河南省政府、中国科学技术协会主办&#xff0c;郑州市人民政府、中国仪器仪表学会、河南省工业和信息化厅、河南省科学技术协会承办的“2023世界传感器大会”将于11月5日~7日在郑州国际会展中心举办。 传感器是链接数字世界与物理世界的桥梁&#xff0c;是万物互联、智慧化时…

[EFI]asus strix b760-i 13900F电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 asus strix b760-i 处理器 I9 13900F 已驱动内存crucial ddr5-5200 64gb(32gb*2)(overclock 5600)已驱动硬盘 WD black sn850 500g*2 已驱动显卡rx570已驱动声卡Realtek ALCS1220A已驱动网卡Intel I225-V 2.5 Gigabit Ethernet已驱动无线网卡蓝牙Fevi T91…

密码学基础

密码学总览 信息安全面临的危险与应对这些威胁的密码技术&#xff1a; 关于上图中的威胁&#xff0c;这里在简单的说明&#xff1a; 窃听&#xff1a;指的是需要保密的消息被第三方获取。篡改&#xff1a;指的是消息的内容被第三方修改&#xff0c;达到欺骗的效果。伪装&…