当前位置: 首页 > news >正文

python整合网站开发技术ps如何做ppt模板下载网站

python整合网站开发技术,ps如何做ppt模板下载网站,无锡模板网站,2元域名注册网站392.判断子序列 题目要求#xff1a;给定字符串 s 和 t #xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些#xff08;也可以不删除#xff09;字符而不改变剩余字符相对位置形成的新字符串。#xff08;例如#xff0c;ace是…392.判断子序列 题目要求给定字符串 s 和 t 判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些也可以不删除字符而不改变剩余字符相对位置形成的新字符串。例如ace是abcde的一个子序列而aec不是。 示例 1 输入s abc, t ahbgdc输出true 示例 2 输入s axc, t ahbgdc输出false 思路 直觉上和昨天的题目很像判断s是否是t的子序列。 dp[i][j] 表示以下标i-1为结尾的字符串s和以下标j-1为结尾的字符串t相同子序列的长度为dp[i][j]。 确定递推公式 if (s[i - 1] t[j - 1])那么dp[i][j] dp[i - 1][j - 1] 1;因为找到了一个相同的字符相同子序列长度自然要在dp[i-1][j-1]的基础上加1如果不理解在回看一下dp[i][j]的定义 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]; 从递推公式可以看出dp[i][j]都是依赖于dp[i - 1][j - 1] 和 dp[i][j - 1]所以dp[0][0]和dp[i][0]是一定要初始化的。 这里大家已经可以发现在定义dp[i][j]含义的时候为什么要表示以下标i-1为结尾的字符串s和以下标j-1为结尾的字符串t相同子序列的长度为dp[i][j]。 因为这样的定义在dp二维矩阵中可以留出初始化的区间如图 class Solution { public:bool isSubsequence(string s, string t) {vectorvectorint dp(s.size() 1, vectorint(t.size() 1, 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] 1;else dp[i][j] dp[i][j-1];}}return dp[s.size()][t.size()] s.size();} }; 115.不同的子序列 题目要求给定一个字符串 s 和一个字符串 t 计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指通过删除一些也可以不删除字符且不干扰剩余字符相对位置所组成的新字符串。例如ACE 是 ABCDE 的一个子序列而 AEC 不是 题目数据保证答案符合 32 位带符号整数范围。 思路  这道题目如果不是子序列而是要求连续序列的那就可以考虑用KMP。 dp[i][j]以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。 这一类问题基本是要分析两种情况 s[i - 1] 与 t[j - 1]相等s[i - 1] 与 t[j - 1] 不相等 当s[i - 1] 与 t[j - 1]相等时dp[i][j]可以有两部分组成。 一部分是用s[i - 1]来匹配那么个数为dp[i - 1][j - 1]。即不需要考虑当前s子串和t子串的最后一位字母所以只需要 dp[i-1][j-1]。 一部分是不用s[i - 1]来匹配个数为dp[i - 1][j]。 这里可能有录友不明白了为什么还要考虑 不用s[i - 1]来匹配都相同了指定要匹配啊。 例如 sbagg 和 tbag s[3] 和 t[2]是相同的但是字符串s也可以不用s[3]来匹配即用s[0]s[1]s[2]组成的bag。 当然也可以用s[3]来匹配即s[0]s[1]s[3]组成的bag。 所以当s[i - 1] 与 t[j - 1]相等时dp[i][j] dp[i - 1][j - 1] dp[i - 1][j]; 当s[i - 1] 与 t[j - 1]不相等时dp[i][j]只有一部分组成不用s[i - 1]来匹配就是模拟在s中删除这个元素即dp[i - 1][j] 所以递推公式为dp[i][j] dp[i - 1][j]; 这里可能有录友还疑惑为什么只考虑 “不用s[i - 1]来匹配” 这种情况 不考虑 “不用t[j - 1]来匹配” 的情况呢。 这里大家要明确我们求的是 s 中有多少个 t而不是 求t中有多少个s所以只考虑 s中删除元素的情况即 不用s[i - 1]来匹配 的情况。 从递推公式dp[i][j] dp[i - 1][j - 1] dp[i - 1][j]; 和 dp[i][j] dp[i - 1][j]; 中可以看出dp[i][j] 是从上方和左上方推导而来如图那么 dp[i][0] 和dp[0][j]是一定要初始化的。 每次当初始化的时候都要回顾一下dp[i][j]的定义不要凭感觉初始化。 dp[i][j]以i-1为结尾的s子序列中出现以j-1为结尾的t的个数为dp[i][j]。 dp[i][0]表示什么呢 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]一定都是0s如论如何也变成不了t。 最后就要看一个特殊位置了即dp[0][0] 应该是多少。 dp[0][0]应该是1空字符串s可以删除0个元素变成空字符串t。 vectorvectorlong long dp(s.size() 1, vectorlong long(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; // 其实这行代码可以和dp数组初始化的时候放在一起但我为了凸显初始化的逻辑所以还是加上了。 class Solution { public:int numDistinct(string s, string t) {vectorvectoruint64_t dp(s.size() 1, vectoruint64_t(t.size() 1, 0));for (int i 0; i s.size(); i) dp[i][0] 1;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] dp[i-1][j-1];else dp[i][j] dp[i-1][j];}}return dp[s.size()][t.size()];} }; 递归推导过程有点绕不好理解。而且产生dp的想法很重要重要的是dp[i][j]代表什么。 时间复杂度: O(n * m)空间复杂度: O(n * m)
http://www.dnsts.com.cn/news/210551.html

相关文章:

  • 商城网站支付宝接口建公司网站建设明细报价表
  • 什么叫宣传类网站网站建设 内容缺乏
  • 手机网站怎样做解析wordpress怎么换图标
  • 做网站需要注意哪些合工大智能院网站建设
  • seo查询工具网站成都最新房价一览表
  • 好网站推荐的网站婚纱网站建设步骤和方法
  • 个人如何做免费网站网站开发 相册
  • 建设招聘网站学做美食的网站视频
  • 商城网站管理系统.net简单网站开发视频教程
  • 网站可以做章子吗搭建wordpress程序
  • 如何选择宜昌网站建设芜湖做网站多少钱
  • 做百度推广网站多少钱向客户介绍网站建设的话本
  • inititle 网站建设培训班该如何建站
  • 关于企业官方网站建设的ppt公众号怎么做文章推广
  • 电子政务门户网站建设汇报推广方式线上线下
  • wordpress 主题和插件下载失败怎么寻找网站关键词并优化
  • 想开民宿自己怎么做介绍的网站南宁大型网站设计公司
  • 开封市网站开发公司wordpress mce
  • 外贸优化网站制作免费ps软件网站
  • 女生做a视频的网站是什多少域名链接网站
  • 高效的网站建设他达拉非能治好性功能障碍吗
  • 网站域名注册的相关证书证明文件网站建设凭证
  • 网站建设工具哪家好工商执照注册号查询网
  • 网站备案密码是什么样的弄个微信小程序多少钱
  • 微信公众号小说代理和网站结合怎么做百度站长怎么验证网站
  • 怎么注册网站啊工装公司怎么找
  • 手机网站大全艺术字体在线设计免费版
  • 音乐网站开发与需求wordpress 添加分享
  • 门户网站的分类html5 php 网站源码
  • 制作网站riverwordpress开发视频网站模板