最长公共子序列(输出公共序列)

2023-11-04

给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。

比如两个串为:

 

abcicba

abdkscab

 

ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。

Input

第1行:字符串A 
第2行:字符串B 
(A,B的长度 <= 1000)

Output

输出最长的子序列,如果有多个,随意输出1个。

Sample Input

abcicba
abdkscab

Sample Output

abca
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>

using namespace std;
const int MAXL(1e3);
int flag[MAXL+50][MAXL+50];
char s1[MAXL+50],s2[MAXL+50];
int dp[MAXL+50][MAXL+50];
void LCS()
{
    memset(dp,0,sizeof(dp));
    memset(flag,0,sizeof(flag));
    for(int i=1;i<=strlen(s1);i++)
    {
        for(int j=1;j<=strlen(s2);j++)
        {
            if(s1[i-1]==s2[j-1])
                dp[i][j]=dp[i-1][j-1]+1,flag[i][j]=0;
            else if(dp[i-1][j]>=dp[i][j-1])
                dp[i][j]=dp[i-1][j],flag[i][j]=1;
            else
                dp[i][j]=dp[i][j-1],flag[i][j]=-1;
        }
    }
}
void PrintLCS(int i,int j)
{
    if(i==0||j==0)
        return ;
    if(flag[i][j]==0)
    {
        PrintLCS(i-1,j-1);
        cout<<s1[i-1];
    }
    else if(flag[i][j]==1)
        PrintLCS(i-1,j);
    else
        PrintLCS(i,j-1);
}
int main()
{
    while(cin>>s1>>s2)
    {
        LCS();  
        PrintLCS(strlen(s1),strlen(s2));
        cout<<endl;
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最长公共子序列(输出公共序列) 的相关文章

  • 发现一个 Mac 神仙截图工具(截长图、带阴影、贴图等)

    1 前言 在发现 Xnip 之前 我用的都是微信自带截图工具 一用就是好几年 每次从工作电脑切换到个人电脑 创作的时候 截图比较常用 每次都需要为了截图而登录微信 而且不支持截长图 不支持多窗口截图等比较常用的功能 很是失望 总想找一款替代

随机推荐

  • web请求过程剖析

    服务器渲染 在服务器那边直接把数据和html整合在一起 统一返回给浏览器 在页面源代码中能看到数据 客户端渲染 第一次请求只要一个html骨架 第二次请求拿到数据进行数据展示 在页面源代码中看不到数据 在打开额网页右键点检查 gt Netw
  • Vijava 学习笔记之(VirtualMachineRelocateSpec类)

    VirtualMachineRelocateSpec 移动或复制指定虚拟机 使用不同的DataStore或HostSystem Properties NAME TYPE DESCRIPTION datastore ManagedObject
  • GDI+绘制的一个Report Designer原型

    早上看到Pvistely同学在说设计器编程的一些问题 想起来我也曾使用GDI 做过一个报表设计器的原型 刚才翻到了代码 居然已经是整整一年前的东西了 时间过的可真是快啊 当时产品里计划要提供可视化报表设计功能 于是part time了两个周
  • AD620放大器 AD623放大器 仪表放大器 差分放大器 微弱信号放大 原理图和PCB设计

    AD620放大器 AD623放大器 仪表放大器 差分放大器 微弱信号放大 原理图和PCB设计 目录 AD620放大器 AD623放大器 仪表放大器 差分放大器 微弱信号放大 原理图和PCB设计 基本原理 芯片选型 原理图 3D PCB 具体
  • getBoundingClientRect offsetWidth offsetHeight

    对于一个旋转的dom元素 getBoundingClientRect 得到的width height是外接矩形的宽高 offsetWidth offsetHeight是未旋转前dom的宽高
  • 【开发实践】美团为什么开发 Kylin On Druid(下)?

    前言 在上篇文章里 我们比较了 Kylin 和 Druid 这两个重要的 OLAP引擎的特点 也分析了 Kylin on HBase 的不足 得出了使用 Druid 代替 HBase 作为 Kylin 存储的方案 最后介绍了美团开发的 Ky
  • 【C++】vector类的使用和模拟实现和如何解决迭代器失效的问题

    1 vector的介绍 vector文档介绍 vector是表示可变大小数组的序列容器 就像数组一样 vector也采用的连续存储空间来存储元素 也就是意味着可以采用下标对vector的元素进行访问 和数组一样高效 但是又不像数组 它的大小
  • windows缺少msvcp120.dll解决方案

    安装最新的Microsoft Visual C Redistributable Package 该错误标识MSVCR120 dll文件的问题 该文件属于Visual C Redistributable Package 可以通过从官方网站重新
  • 【C++11新特性】auto、范围for语句、nullptr

    文章目录 1 auto 2 范围for语句 2 1 遍历数组 2 2 遍历字符串 2 3 遍历STL容器 3 nullptr 1 auto auto 可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型 也就是说 声明时必须要
  • jenkins war版的在Linux下的安装与卸载

    文章目录 目录 文章目录 前言 一 安装 二 卸载 总结 前言 Jenkins是一个开源软件项目 是基于Java开发的一种持续集成工具 用于监控持续重复的工作 集成 该软件可以集成其他软件 来完成相应的功能 一 安装 因为jenkins本身
  • 【实习】vue input下拉及搜索功能

    一个需求input实现下拉及搜索 实习练手不让用ui模板 首先百度得出2种方法 一个是input select 一个是input datalist input组合select改css写js 最后bug太多放弃了 input datalist
  • 突破神奇的Cloudflare防火墙

    背景 最近碰到一个神奇的网站 在浏览器可以打开 但是通过 curl 或者 代码访问就直接 403 我估摸着这肯定是做了UA校验 于是请求的时候把浏览器的 UA 给带上 然后访问发现还是 403 不过这也难不倒我 肯定是还有校验其它的请求头
  • 双线性卷积神经网络_全卷积网络Fully Convolutional Networks (FCN)实战

    全卷积网络Fully Convolutional Networks FCN 实战 使用图像中的每个像素进行类别预测的语义分割 全卷积网络 FCN 使用卷积神经网络将图像像素转换为像素类别 与之前介绍的卷积神经网络不同 FCN通过转置卷积层将
  • MOS管烧毁,90%以上的硬件工程师都会遇到的问题!

    MOS管烧毁 我相信90 以上的硬件工程师在职场生涯中都会遇到这类问题 然而这类问题也总是让人防不胜防 那么今天小白就给大家讲解一下MOS管烧毁的几个常见原因 在讲解前 小白给大家画一下MOS管的等效模型 以我最熟悉的N MOS管举例 给大
  • Thinkphp6.0框架远程调试配置

    首先需要安装think socketlog扩展 composer require topthink think socketlog 只需要在log php配置文件中加入如下配置 默认日志记录通道 记得在env中配置参数 default gt
  • type-aliases-package的用法

    type aliases package作用 在Mybatis的mapper xml文件中resultType的type或者paramterType会返回自定义entity 此时可以用全类名名来指定这些实体 举例
  • facechain环境部署

    环境安装 创建虚拟环境facechain conda create n facechain python 3 8 conda activate facechain 克隆 GIT LFS SKIP SMUDGE 1 git clone htt
  • SpringBoot入门篇--对于JSON数据的返回以及处理一

    在后台的开发过程中不可避免的就是一系列对JSON数据的返回 需要我们进行的就是提供各种各样的数据 一般情况下数据类型最常用的就是JSON以及XML 在这里我们就讲讲在SpringBoot里面我们怎样进行JSON数据的返回以及数据一些特殊情况
  • Ubuntu18.04安装indicator-sysmonitor显示实时网速

    系统环境 Ubuntu18 04 6 LTS 1 添加源 sudo add apt repository ppa fossfreedom indicator sysmonitor 2 更新源 sudo apt get update 3 安装
  • 最长公共子序列(输出公共序列)

    给出两个字符串A B 求A与B的最长公共子序列 子序列不要求是连续的 比如两个串为 abcicba abdkscab ab是两个串的子序列 abc也是 abca也是 其中abca是这两个字符串最长的子序列 Input 第1行 字符串A 第2