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

政府网站源码手机网页制作

政府网站源码,手机网页制作,网站制作专业的公司哪家好,手机微信网页版登录给你两个字符串 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.shuangfujiaoyu.com/news/27105.html

相关文章:

  • 微信公众号如何做微网站关键词调整排名软件
  • 义乌小商品批发网官网优化 保证排名
  • 阿里云网站如何做淘宝客软文网站
  • 浙江网报通用招聘平台百度seo关键词排名s
  • 台州市建设局招聘网站创建一个网站
  • 郑州达云通网站建设公司怎么样短视频seo系统
  • 北京建站公司兴田德润很赞最新天气预报最新消息
  • 广州 经营性网站备案网络营销策划书论文
  • wordpress 免费字体唐山seo排名外包
  • 官方网站建设银行2010年存款利息全媒体广告代理加盟靠谱吗
  • 潍坊 企业网站建设网站链接推广工具
  • 广州可以做票务商城的网站公司产品如何推广市场
  • 手机网站头部图片怎么做如何修改百度上面的门店号码
  • 网站收录目录源码安徽seo报价
  • 国外有没有网站是做潘多拉的湖北网络推广
  • 高端品质网站建设如何自己制作网页
  • 合肥做网站cnfg百度广告投放技巧
  • 丹江口做网站广告策划方案怎么做
  • 南京哪家网站做的好只需要手机号的广告
  • 北京网站开发外包企业营销策略
  • 重庆网站建设红旗河沟实时军事热点
  • 妇女之家网站建设方案成都网站seo技巧
  • 网页建设教程西安seo站内优化
  • 做网站公司青浦自己建个网站要多少钱
  • 旅游在线网站开发推广代理登录页面
  • 企业网站设计的要求标题优化怎么做
  • 特产网站建设东莞seo整站优化火速
  • 网站做视频的软件新闻类软文
  • 郑州市多商家网站制作公司静态网站模板
  • 门户网站如何做谷歌seo百度云电脑版网站入口