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

营销型网站的建设软文oa办公系统下载安装

营销型网站的建设软文,oa办公系统下载安装,域名备案网站源码,网站做短视频业务许可给你两个字符串 str1 和 str2,返回同时以 str1 和 str2 作为 子序列 的最短字符串。如果答案不止一个,则可以返回满足条件的 任意一个 答案。 如果从字符串 t 中删除一些字符(也可能不删除),可以得到字符串 s &#x…

给你两个字符串 str1 和 str2,返回同时以 str1 和 str2 作为 子序列 的最短字符串。如果答案不止一个,则可以返回满足条件的 任意一个 答案。

如果从字符串 t 中删除一些字符(也可能不删除),可以得到字符串 s ,那么 s 就是 t 的一个子序列。

示例 1:
输入:str1 = “abac”, str2 = “cab”
输出:“cabac”
解释:
str1 = “abac” 是 “cabac” 的一个子串,因为我们可以删去 “cabac” 的第一个 "c"得到 “abac”。
str2 = “cab” 是 “cabac” 的一个子串,因为我们可以删去 “cabac” 末尾的 “ac” 得到 “cab”。
最终我们给出的答案是满足上述属性的最短字符串。

示例 2:
输入:str1 = “aaaaaaaa”, str2 = “aaaaaaaa”
输出:“aaaaaaaa”

提示:
1 <= str1.length, str2.length <= 1000
str1 和 str2 都由小写英文字母组成。

class Solution {
public:string shortestCommonSupersequence(string str1, string str2) {int m = str1.size(), n = str2.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 (str1[i - 1] == str2[j - 1]) {// 如果当前字符相等,则在前一个 LCS 的基础上加 1dp[i][j] = dp[i - 1][j - 1] + 1;} else {// 否则,取前一个状态的最大值dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}}}int i = str1.size();int j = str2.size();string result = "";// 通过回溯 dp 数组来构建resultwhile (i > 0 && j > 0) {if (str1[i - 1] == str2[j - 1]) {// 如果字符相等,则是 result 的一部分result = str1[i - 1] + result;i--;j--;} else if (dp[i - 1][j] > dp[i][j - 1]) {// 如果字符不等,加入 str1 的字符result = str1[i - 1] + result;i--;} else {// 或者加入 str2 的字符result = str2[j - 1] + result;j--;}}while (i > 0) {result = str1[i - 1] + result;i--;}while (j > 0) {result = str2[j - 1] + result;j--;}return result;}
};

时间复杂度:O(n×m)
空间复杂度:O(n×m)

这道题的思路是先找到最短公共子序列LCS,然后我们知道了最短公共子序列后,就可以进而根据str1和str2还有dp进行回溯来构建出最短公共超序列result。

这道题的前面部分就是在求关于LCS的dp数组,可以参考模板力扣1143(主页有)。
这道题的难点我觉得是在回溯dp来构建result上面。
根据题目给的例子:

我们定义两个指针i和j分别指向str1和str2的最后一个元素。
当两个元素相等的时候,说明他们是LCS的一部分,所以将这个元素推入result中,由于str1和str2都包含这个元素,所以i和j都要-1。
当两个元素不相等的时候,我们就要将较不容易影响LCS的字符推入到result中,比如dp[i - 1][j] > dp[i][j - 1],也就是str[i-1]相对str[j-1]从字符串推入到result后,能尽可能保证剩下的字符串的LCS尽可能的大。

举个例子:
输入:str1 = “abac”, str2 = “cab”
在第一次判断的过程中,指针i指向str1的c,指针j指向str2的b,由于str1和str2的LCS是ab,那么b作为LCS的一部分,那么推入b就会影响到LCS(如果推入b后,那么构造LCS就没有意义,构造LCS的目的是让指针在都指向LCS的部分的时候,可以只推入一个元素,然后同时让i和j都-1)。所以我们推入c到result。


然后我们还要处理剩余部分,当某个字符串遍历完后,那么还会有一个字符串没有将元素推入到result中,这时候我们遍历完这个没遍历完的字符串,将其剩余部分推入result。

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

相关文章:

  • 网站运营面试问题一键免费开网店app
  • 网站如何做品牌营销南宁高端网站
  • 苏州建设交通学校网站首页做钢丝绳外贸的网站
  • 网站建设的图片叠加步骤过程没有公司 接单做网站
  • 怎么用网站模板贵阳官方网站
  • 郑州网站建设三猫网络成都网站建设找亮帅
  • 如何策划网站域名网站怎么做的
  • 上海网站建设搭建富阳网站建设服务
  • 5188关键词平台株洲seo排名
  • 网站开发方案目录网站建设用哪种语言好
  • 网站开发者模式有什么用平面设计服务方案
  • 学校如何重视校园网站建设网上发布信息的网站怎么做的
  • 网站加速免费互网站开发维护成本高
  • 网站开发者购物支付模板wordpress 账号密码忘记
  • 简述网站的推广策略内部优惠券网站建站
  • 世界网站流量排名吉林省建设厅官方网站办事指南
  • 网站制作公司 恶意建站目的
  • 女的有没有做网站的个人如何加入百度推广
  • 页游和做网站网站会员后台管理系统
  • 西部数码创建子网站网站建设策划有哪些
  • 企业网站建设课程设计深圳动力网站设计公司
  • 安吉哪里做网站好网络营销外包哪家好
  • 公司 网站源码北京平台网站建设哪里好
  • 用word做网站wordpress 菜单大小
  • 个人网站设计作品htmlwordpress社交插件
  • 太原找工作网站高唐网站开发
  • 湖南省住房建设厅网站企业网站源码简约
  • 南宁网站建站推广衡阳网站建设开发价格
  • 跨境电商网站开发公司企业管理平台系统
  • 做代理记账网站偷的网站怎么做seo