首页 > 其他分享 >1092. 最短公共超序列

1092. 最短公共超序列

时间:2024-08-21 20:04:48浏览次数:8  
标签:lcs 1092 -- str2 str1 back 最短 序列 string

非常好的一道理解LCS本质的题目

class Solution {
public:


    
    string longestCommonSubsequence(const string str1, const string str2) {
        int m = str1.length();
        int n = str2.length();

        // 创建一个二维数组来存储LCS的长度
        vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));

        // 填充dp数组
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                if (str1[i - 1] == str2[j - 1]) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }

        // 从dp数组中构建LCS
        int i = m, j = n;
        string lcs;
        while (i > 0 && j > 0) {
            if (str1[i - 1] == str2[j - 1]) {
                lcs.push_back(str1[i - 1]);
                --i;
                --j;
            } else if (dp[i - 1][j] > dp[i][j - 1]) {
                lcs.push_back(str1[i - 1]);
                --i;
            } else {
                lcs.push_back(str2[j- 1]);
                --j;
            }
        }
        while(j>0){
            lcs.push_back(str2[j- 1]);
            --j;
        }
        while(i>0){
            lcs.push_back(str1[i- 1]);
            --i;
        }
        // 由于我们是从后往前构建LCS,所以需要反转字符串
        reverse(lcs.begin(), lcs.end());
        return lcs;
    }
    string shortestCommonSupersequence(string str1, string str2) {
        

        return longestCommonSubsequence(str1,str2);  

        
    }
};

标签:lcs,1092,--,str2,str1,back,最短,序列,string
From: https://www.cnblogs.com/pengge666/p/18372403

相关文章

  • 最短路 - Dijkstra 算法
    Dijkstra(迪杰斯特拉)算法是基于贪心思想的单源最短路算法暴力Dijkstra具体如下:structnode{ intv,w;};vector<node>e[N];intdist[N],vis[N];e[u]存的是节点u的所有出边的终点和边权,dist[u]存u到原点s的最小距离,vis[u]标记是否走过voiddijkstra(int......
  • 二叉树的序列化和反序列化(Java)
    概述关于面试中常见的其他二叉树算法题,参考面试+算法之二叉树(Java)。二叉树的定义(注意到有使用lombok提供的两个注解):@[email protected]{privateTreeNodeleft;privateTreeNoderight;privatefinalint......
  • 面试+算法之动态规划(Java):斐波那契、背包问题、走棋盘、分苹果、连续子数组最大和、
    概述Dynamicprogramming,简称DP,动态规划,基础算法之一,维基百科的解释:是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时......
  • 面试+算法之回文(Java):验证回文串、回文数、最长回文子串、回文链表、分割成回文串、
    概述算法是一个程序员的核心竞争力,也是面试最重要的考查环节。本文整理一些与回文相关的基础算法题。注:本文语言为Java。验证回文串如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。给定一个字符......
  • 14 生成特定二进制数字环的程序实现:确保所有可能子序列唯一
    下图是由2^3个二进制数字组成的环,由3个二进制数字构成的2^3种不同的数字序列恰好在该环中分别出现一次,例如:从箭头位置开始按顺时针方向每三个连续的二进制数字构成的序列各不相同,它们所代表的十进制数依次是:0,1,2,5,3,7,6,4.编写一个完整程序,该程序对于输入的正整数n,生成由2^n个二......
  • 大语言模型用于金融领域时间序列预测,真的有效吗?
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:    本文主要探讨了大型语言模型(LLMs)在时间序列预测任务中的有效性,其对大语言模型在时间序列预测中的有效性提出了质疑,并且针对当下最为先进的OneFitsAll、Time-LLM、LLaTA这3个基于大语言模型的时间序......
  • 机器学习--序列到序列模型总结
    序列到序列(Seq2Seq)模型的发展历程中,随着技术的进步和研究的深入,出现了多种不同的架构。这些架构在编码器-解码器结构的基础上逐步演化,融合了多种改进策略和创新方法。以下是总结出的主要Seq2Seq模型架构:1.基础的RNNSeq2Seq模型编码器和解码器:最早的Seq2Seq模型使用简单的......
  • 时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN
    时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention文章目录前言时序预测|基于贝叶斯BO-卷积-双向门控单元-注意力机制的单变量时间序列预测模型BO-CNN-BiGRU-Attention一、BO-CNN-BiGRU-Attention模型1.贝叶斯优......
  • leetcode 热题思路解析-最长连续序列
    题目给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入......
  • LeetCode300.最长递增子序列
    LeetCode300.最长递增子序列力扣题目链接(opensnewwindow)给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[......