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

揭阳网站免费建站郑州网站建设怎么样

揭阳网站免费建站,郑州网站建设怎么样,做旅游海报哪个网站好免费的,网站项目流程1143. 最长公共子序列 - 力扣(LeetCode) 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串…

1143. 最长公共子序列 - 力扣(LeetCode)

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

  • 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。

两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

示例 1:

输入:text1 = "abcde", text2 = "ace" 
输出:3  
解释:最长公共子序列是 "ace" ,它的长度为 3 。

示例 2:

输入:text1 = "abc", text2 = "abc"
输出:3
解释:最长公共子序列是 "abc" ,它的长度为 3 。

示例 3:

输入:text1 = "abc", text2 = "def"
输出:0
解释:两个字符串没有公共子序列,返回 0 。

 >>思路和分析

本题和 leetCode 718.最长重复子数组 区别在于这里不要求是连续的了,但是要有相对顺序,即:"ace" 是 "abcde" 的子序列 ,但是 "aec" 不是 "abcde" 的子序列 

>>动规五部曲

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

dp[i][j] : 长度为 [0,i-1] 字符串 text1 与长度为 [0,j-1]字符串text2最长公共子序列为dp[i][j]

2.确定递推公式

思考:有哪些方向可以推出dp[i][j]

  • text1[i-1] == text[j-1]时,dp[i][j]=dp[i-1][j-1]+1
  • text1[i-1] != text[j-1]时,分两种情况讨论:
    • 情况①: 不看e了,考虑c,就是abc和ac。这两个原字符串的最长公共子序列也可能是abc和ac的最长公共子序列。因为c和e明显不相同,那么可不考虑e了
    • 情况②: 同理,也可以不看c了,考虑e,就是ab和ace。这两个字符串也可能是两个原字符串的最长公共子序列
    • 那么这两种情况应该怎么取呢?这两种情况都有可能是dp[i][j],那么
      • dp[i][j] = max(dp[i][j-1],dp[i-1][j]);
        • 情况①对应dp[i][j-1]
        • 情况②对应dp[i-1][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]);

3.dp数组初始化

  • dp[i][0] 应该初始化为0,因为 test1[0,i-1] 空串最长公共子序列是0
  • dp[0][j] 同理也为0
  • 其他下标都是随着递推公式逐步覆盖,初始为多少都可以

故统一初始为0,代码如下:

vector<vector<int>> dp(text1.size() + 1, vector<int>(text2.size() + 1, 0));

4.确定遍历顺序

那么为了在递推的过程中,这三个方向都是经过计算的数值,所以要从前向后从上到下来遍历这个矩阵

5.举例推导dp数组

由上图可看到dp[text1.size()][text2.size()]为最终结果

class Solution {
public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp(text1.size() + 1, vector<int>(text2.size() + 1, 0));for (int i = 1; i <= text1.size(); i++) {for (int j = 1; j <= text2.size(); 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[text1.size()][text2.size()];}
};
  • 时间复杂度: O(n * m),其中 n 和 m 分别为 text1 和 text2 的长度
  • 空间复杂度: O(n * m)

>>优化空间复杂度

class Solution {
public:// 滚动数组int longestCommonSubsequence(string text1, string text2) {vector<int> dp(text2.size() + 1, 0);for(int i=1;i<=text1.size();i++) {int pre = dp[0];for(int j=1;j<=text2.size();j++) {int tmp = dp[j];if(text1[i-1] == text2[j-1]) dp[j] = pre + 1;else dp[j] = max(dp[j-1],dp[j]);pre = tmp;}}return dp[text2.size()];}
};
  • 时间复杂度: O(n * m),其中 n 和 m 分别为 text1 和 text2 的长度
  • 空间复杂度: O(m)

参考文章和视频:

动态规划子序列问题经典题目 | LeetCode:1143.最长公共子序列_哔哩哔哩_bilibili 代码随想录 (programmercarl.com)

来自代码随想录课堂截图:

http://www.yayakq.cn/news/339640/

相关文章:

  • 大良网站设计价格wordpress如何设置字体大小
  • 织梦网站安装视频教程seo营销推广
  • 网站英语苏州网页设计费用
  • 优质的菏泽网站建设官方网站怎么找
  • 网站建设文翻译工作室申泽seo
  • 网站建设商标保护简述对网站进行评析的几个方面.
  • 端午节网站建设结合实际
  • 重庆建设工程安全管理局网站营销型网站策划书
  • 国外域名注册网站海宁高端高端网站设计
  • 企业形象设计方案资阳市网站seo
  • 网站交互技术软件维护有哪些内容
  • 上海建设工程标准与造价信息网站建筑施工企业中是应急救援领导
  • cms是什么意思的缩写百度seo怎么查排名
  • 网站如何引导客户在哪个网站注册域名
  • 郑州公共住宅建设投资有限公司网站wordpress 获取页面列表
  • 设计网站建设书南昌php网站开发笔试题
  • 迅雷之家是迅雷做的网站吗旅游网站开发的需求
  • 网站建设最简单的教程安徽建站优化
  • 网站建设网络公司免费个人logo设计
  • 59zwd一起做网站广州网站建设优化公司
  • 企业电商网站建设wordpress 空白框架
  • shopify做全品类网站杭州劳保网站制作
  • 揭阳网站制作计划如何做局域网网站
  • 做网站需要加班吗做网络推广要做网站吗
  • 搜狐快站怎么样wordpress 显示微信二维码
  • 福建省建设资格注册与管理中心网站建筑设计院分公司加盟
  • 衡水移动网站建设报价wordpress 禁止游客
  • 手机端 网站 模板网站模板免费下载php
  • 音乐网站要怎么做做电销有什么资料网站
  • 动易网站管理系统下载域名查询万网