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

方太官方网站的建设情况百度指数官方下载

方太官方网站的建设情况,百度指数官方下载,网上书城网站开发的数据字典,网站后台管理水印怎么做文章目录 最长公共子序列不相交的线不同的子序列通配符匹配 最长公共子序列 题目:最长公共子序列 思路 选取s1的[0, i]区间以及s2的[0, j]区间作为研究对象 状态表示:dp[i][j]表示,s1的[0, i]区间以及s2的[0, j]区间内…

文章目录

  • 最长公共子序列
  • 不相交的线
  • 不同的子序列
  • 通配符匹配

最长公共子序列

题目:最长公共子序列

在这里插入图片描述
思路

选取s1[0, i]区间以及s2[0, j]区间作为研究对象

  • 状态表示:dp[i][j]表示,s1[0, i]区间以及s2[0, j]区间内所有的子序列中,最长公共子序列的长度

  • 状态转移方程:

    • s1[i] == s2[j]时,即最长公共子序列以s1[i]结尾,所以有dp[i][j] = dp[i - 1][j - 1] + 1
    • s1[i] != s2[j]时,最长公共子序列一定不以s1[i]结尾,所以
      1. s1[0, i - 1]区间以及s2[0, j]区间寻找答案,即dp[i][j] = dp[i - 1][j]
      2. s1[0, i]区间以及s2[0,j - 1 ]区间寻找答案,即dp[i][j] = dp[i][j - 1]
      3. s1[0, i - 1]区间以及s2[0, j - 1]区间寻找答案,即dp[i][j] = dp[i - 1][j - 1]
      • 综上,12以及包括3,所以dp[i][j] = max(dp[i][j - 1], dp[i - 1][j])
  • 初始化:引入空串,帮助我们初始化
    s1, s2前添加一个空字符,也就是说s1[0]s2[0]的位置的值是空串;
    dp表的大小为 (m+1) x (n+1),其中 m n s1s2的长度。初始化时,将第一行和第一列的值都设置为0
    注意下标的映射

  • 填表顺序:每次ij都需要用到i - 1j - 1,所以从上往下填,从左往右填

  • 返回值:dp[m][n],其中 m n s1s2的长度

C++代码

class Solution 
{
public:int longestCommonSubsequence(string text1, string text2) {int m = text1.size(), n = text2.size();vector<vector<int>> dp(m + 1, vector<int>(n + 1));for(int i = 1; i <= m; i++)for(int j = 1; j <= n; j++)if(text1[i - 1] == text2[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);return dp[m][n];}   
};

不相交的线

题目:不相交的线

在这里插入图片描述
思路

阅读本题后发现和上题解法基本相同

C++代码

class Solution 
{
public:int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {int m = nums1.size(), n = nums2.size();vector<vector<int>> dp(m + 1, vector<int>(n + 1));for (int i = 1; i <= m; i++)for (int j = 1; j <= n; j++)if (nums1[i - 1] == nums2[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;elsedp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);return dp[m][n];}
};

不同的子序列

题目:不同的子序列

在这里插入图片描述
思路

选取t[0, i]区间以及s[0, j]区间作为研究对象

  • 状态表示:dp[i][j]表示,s[0, j]区间内所有的子序列中,有多少个t[0, i]区间内的子串
  • 状态转移方程:根据s的子序列包不包含s[j]来划分
    • 包含s[j]时,t[i] == s[j],此时dp[i][j] = dp[i - 1][j - 1]
    • 不包含s[j]时,此时dp[i][j] = dp[i][j - 1]
  • 初始化:引入空串,注意下标的映射,
    • t为空时,s中至少有一个空串是其子串,所以第一行为1
    • s为空时,t只有是空串时,符合题意,第一列除了第一个都是0
  • 填表顺序:ij填写都需要用到i - 1j - 1,所以从上往下填,从左往右填
  • 返回值:dp[m][n],其中 m n ts的长度

C++代码

class Solution 
{
public:int numDistinct(string s, string t) {int m = t.size(), n = s.size();vector<vector<double>> dp(m + 1, vector<double>(n + 1));for(int j = 0; j <= n; j++) dp[0][j] = 1;for(int i = 1; i <= m; i++)for(int j = 1; j <= n; j++){dp[i][j] += dp[i][j - 1];if(t[i - 1] == s[j - 1]) dp[i][j] += dp[i - 1][j - 1];}return dp[m][n];}
};  

通配符匹配

题目:通配符匹配

在这里插入图片描述
思路

选取选取第一个字符串[0, i]区间以及第二个字符串 [0, j]区间作为研究对象

  • 状态表示:dp[i][j]表示,p[0, j]区间内的子串中,能否匹配s[0, i]区间内的子串

  • 状态转移方程:根据根据最后一个位置的元素,来讨论

    • p[j]是普通字符,s[i] == p[j] && dp[i - 1][j - 1] == true ->true
    • p[j] == '?'dp[i - 1][j - 1] == true -> true
    • p[j] == '*'
      • 匹配空串,dp[i][j - 1]
      • 匹配一个字符s[i]dp[i - 1][j - 1]
      • 匹配两个字符s[i]、s[i - 1]dp[i - 2][j - 1]
      • ... ... ... ...

      优化p[j] == '*'

        1. 我们注意到
      • dp[i][j] = dp[i][j -2] || dp[i - 1][j - 2] || dp[i -2][j -2] || ... ...
      • dp[i - 1][j] = dp[i - 1][j -2] || dp[i - 2][j - 2] || dp[i -3][j -2] || ... ...
      • 所以,dp[i][j] = dp[i][j - 1] || dp[i - 1][j]
      • 匹配空串,dp[i][j - 1]
      • 匹配一个,但不舍去*dp[i - 1][j]
      • 所以,dp[i][j] = dp[i][j - 1] || dp[i - 1][j]
  • 初始化:引入空串,注意下标的映射,

    • 初始化整个数组为false
    • dp[0][0]表示两个空串是否匹配,初始化为true
    • 第一行表示s 为空串,p 串与空串只有一种匹配可能,即 p 串表示为 "***",此时也相当于空串匹配上空串,将所有前导为 "*" p子串与空串的 dp 值设为true
  • 填表顺序:ij填写都需要用到i - 1j - 1,所以从上往下填,从左往右填

  • 返回值:dp[m][n],其中 m n sp的长度

C++代码

class Solution 
{
public:bool isMatch(string s, string p) {int m = s.size(), n = p.size();vector<vector<bool>> dp(m + 1, vector<bool>(n + 1));s = " " + s;p = " " + p;dp[0][0] = true;for(int j = 1; j <= n; j++)if(p[j] == '*') dp[0][j] = true;else break;for(int i = 1; i <= m; i++)for(int j = 1; j <= n; j++){if(p[j] == '*')dp[i][j] = dp[i - 1][j] || dp[i][j - 1];elsedp[i][j] = (p[j] == '?' || s[i] == p[j]) && dp[i -1][j - 1];}return dp[m][n];}
};
http://www.dinnco.com/news/53832.html

相关文章:

  • 山西省网站建设制作怎么建立个人网站
  • 对于网站建设提出建议生意参谋官网
  • 西安哪家公司做网站手机百度下载
  • 厦门哪些企业做视频网站的广告开户
  • 论坛型网站怎么做的网络营销做的好的企业
  • 国外做游戏的视频网站有哪些问题seo人才网
  • 做防水的网站有哪些搜索引擎优化是什么?
  • 外包公司和公司直招哪个好朝阳网站seo
  • 网站无后台可以上框架seo排名赚app靠谱吗
  • 幼儿园网站设计软文营销网站
  • 做信息图网站hao123文件在哪里
  • 绍兴 网站制作百度seo怎么提高排名
  • 邢台在百度上做个网站怎么创建一个网址
  • 广州哪家做网站价格好交换友情链接推广法
  • 百度西安研发中心佛山抖音seo
  • 网站建设优化项目关键词推广seo
  • 网站开发数据接口如何利用制作一个网站需要多少费用
  • 海口建设工程信息网站网络宣传
  • 做垃圾站采集国外网站外贸推广平台有哪几个
  • 网站整合推广关键词汇总
  • 一般网站用什么数据库googlechrome
  • 漫画交流网站怎么做安卓优化大师全部版本
  • 网站网络广告推广长沙疫情最新数据消息
  • 网站建设 收费标准营销策略国内外文献综述
  • idc新人如何做自己的网站互联网怎么打广告推广
  • 自己做的网站可以买东西吗百度高级搜索怎么用
  • 哪些网站做财金的好产品市场推广方案范文
  • 设计自己的网站口碑营销的名词解释
  • easyui 做的网站东莞网站优化
  • 网站建设宣传单图片网站安全检测平台