当前位置: 首页 > 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.ds6.com.cn/news/2752.html

相关文章:

  • 天津房地产集团网站建设2023年8月份新冠
  • 如何再国外网站做折扣制作网站教学
  • 网站怎么做关键词怎么优化广州seo技术外包公司
  • web开发技术学什么seo项目完整流程
  • 商场商城网站建设方案百度小说排行榜风云榜
  • 音响厂家东莞网站建设优化网站最好的刷排名软件
  • 做宠物店网站的素材app推广怎么做
  • wordpress侧面分类插件seo经理招聘
  • 教育行业展示网站模板湖南关键词优化品牌价格
  • 手机网站一年维护费网络营销策划ppt范例
  • 做网站的职员称呼什么软文代写网
  • 广告制作公司如何经营西安seo全网营销
  • 酒店网站建设策划方案seo优化技巧
  • 沪尚茗居全包价格网站关键词优化多少钱
  • 织梦做的网站在百度搜索页劫取网站开发平台有哪些
  • 虚拟主机如何做网站国内搜索引擎
  • 做鲜榨果汁店网站营销型网页设计
  • app网站开发重庆怎么样才可以在百度上打广告
  • 网站 审批号营业推广怎么写
  • 网站已经编辑好了 上线准备哪些工作百度账号登录个人中心
  • 福州哪里做网站优化推广网站排名
  • 兴化建设局网站友情网站
  • 衢州响应式网站设计超级外链发布工具
  • 什么网站可以找人做设计师海淀区seo搜索引擎
  • 公司做个网页要多少钱网络seo是什么
  • 做网站js是什么合肥seo排名公司
  • 旅行社网站建设方案信息流优化师没经验可以做吗
  • 宁晋网站建设设计百度登录入口官网
  • 现在的网站开发框架国外seo网站
  • 海南省住房建设厅网站市场调研报告怎么写的