给出两个字符串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;elsedp[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);elsePrintLCS(i,j-1);
}
int main()
{while(cin>>s1>>s2){LCS();  PrintLCS(strlen(s1),strlen(s2));cout<<endl;}
}

最长公共子序列(输出公共序列)相关推荐

  1. 动态规划算法分析和理解:最长公共子序列、公共子字符串

    定义啥的就不多说了,反正我有自己的理解就行.例题是,最长公共子序列和最长公共子字符串的动态规划求解过程 目录 一.递归和动态规划 二.动态规划求解步骤 三.最长公共子序列 四.最长公共子字符串 一.递 ...

  2. 使用最长公共子序列算法进行序列比对

    介绍 在分子生物学中,DNA 和蛋白质可以表示为字母序列. DNA 序列由 A.T.G.C 组成,代表核苷碱基(nucleobases) 腺嘌呤.胸腺嘧啶.鸟嘌呤和胞嘧啶. 蛋白质由 20 个不同的字 ...

  3. 最长公共子序列(稀疏序列)nlogn解法

    首先这种做法只能针对稀疏序列, 比如这种情况: abc abacabc. 会输出5 ,,,,就比较尴尬, 1 #include<iostream> 2 #include<cstdio ...

  4. 每天一道LeetCode-----计算两个序列最长的公共子序列长度

    原题链接Maximum Length of Repeated Subarray 计算两个序列最长的相同子序列的长度 简单暴力的方法是对A中每个元素遍历一遍序列B,找到相同的位置后计算从这个位置开始有多 ...

  5. 动态规划算法下的序列问题:最长公共子序列问题和最大子段和问题

    本篇主要介绍最长公共子序列问题和最大子段和问题 1.最长公共子序列问题 什么是最长公共子序列 给定一个序列X=<x1,x2,x3,x4-,xm>,另一个序列Z=<z1,z2,z3,z ...

  6. 最长公共子序列(JAVA实现)

    题目标题: 计算两个字符串的最长公共子序列的长度,字符不区分大小写. 输入描述:输入两个字符串,分两行输入. 输出描述:输出一个整数. 示例: 输入: 测试数据1(注,字符串前有空格): 12asdf ...

  7. 算法知识之最长公共子序列问题(动态规划)

    最近朋友让帮做个关于动态规划的最长公共子序列的问题,翻看以前的笔记并完成该题后,顺便写这样一篇文章,希望对大家有所帮助,同时也帮助自己回顾该知识点. 一.最长公共子序列的定义 子序列:若给定序列X={ ...

  8. 10.31T4 HAOI2010最长公共子序列 计数+容斥原理

    2775 -- [HAOI2010]最长公共子序列 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序 ...

  9. 【啃不完的算法导论】- 动态规划 - 最长公共子序列(概念篇)

    以下内容纯是为了熟悉<算法导论>中的内容,高手可略过,其中涉及的书本内容的版权归原作者.译者.出版社所有 ========================================= ...

  10. 最长公共子序列LCS(动态规划)—详解

    一.基本概念 1. 子序列(subsequence): 一个特定序列的子序列就是将给定序列中零个或多个元素去掉后得到的结果(不改变元素间相对次序).例如序列<A,B,C,B,D,A,B>& ...

最新文章

  1. 构建之法第一章读后感
  2. 数据库:MYSQL相关设计规范梳理,值得收藏!
  3. .NET 中的泛型 101
  4. 读懂操作系统之虚拟内存(一)
  5. exec su-exec_WildFly Kubernetes exec探针
  6. mysql update 跳过重复_MySQL通过UPDATE / DELETE整合重复的数据记录
  7. python交通流预测代码_使用ARIMA模型进行的短时交通流预测和结果分析
  8. 芯片5nm和7nm有什么差别?CPU已经很小了,可以做大点吗?
  9. 既然光纤那么快,为什么路由器和电脑之间不用光纤连接,而还用普通网线?
  10. 1.6数组-像素翻转
  11. P2P 网络核心技术:Gossip 协议
  12. 在sqlserver sql语句中查找速度快
  13. Jetbrains:设置ctrl+鼠标滚动控制代码字体大小
  14. java 进度条 不更新_java进度条不动怎么解决?
  15. Gson解析json文件
  16. java中使用 Date 和 SimpleDateFormat 类表示时间
  17. 新华三2018校园招聘笔试面试题学习
  18. 在线查看word,excel,pdf文件解决
  19. 黑吃黑第四季/全集Banshee迅雷下载
  20. 毕业季深度学习方面神器----恒源云gpu算力平台

热门文章

  1. git rebase之前需要 commit 才行
  2. OkHttp3用法全解析
  3. PHP 中 json_encode中文处理、urlencode方法、post中文乱码
  4. 拖拽文件作为文件输入
  5. 泡水十几秒仍能工作 小米手机2也能防水了
  6. SQL Server字符串处理函数大全
  7. Spring Boot Web 开发注解篇
  8. 从forEach到迭代器
  9. Android ViewPropertyAnimator:让动画变得简单起来!
  10. node createConnection connect 区别?