最长公共子序列Lcs (51Nod - 1006)
Input第1行:字符串A
第2行:字符串B
(A,B的长度 <= 1000)Output输出最长的子序列,如果有多个,随意输出1个。Sample Input
abcicba
abdkscab
Sample Output
abca
思路:
⒈模板题,不过输出的不是最长序列有多长而是最长序列是什么。
⒉详解见代码。
j-1 j
i-1 (i-1,j-1) (i-1,j)
i (i,j-1) (i,j)
求最长公共子序列的思路:
❶判断末尾是否相等[if(a[i-1]==b[j-1])]=>c[i][j]=c[i-1][j-1]+1;
❷不相等=>c[i][j]=max(c[i][j-1],c[i-1][j]);(及选取最大的);
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int len1,len2;
char a[],b[];
int c[][];
int main()
{
cin>>a>>b;
len1=strlen(a);
len2=strlen(b);
memset(c,,sizeof(c));
int i,j;
for(i=;i<=len1;i++)
for(j=;j<=len2;j++)
{
if(a[i-]==b[j-]) c[i][j]=c[i-][j-]+;
else c[i][j]=max(c[i-][j],c[i][j-]);
}
int x=len1;
int y=len2;
int k=c[x][y];//最长序列出现在右下角.(如果把算出来的c[i][j]画成表格的话)
char lcs[] = {'\0'};
while(i&&j)
{
if(a[i-]==b[j-]&&c[i][j]==c[i-][j-]+)//此时i,j已经到了len1和len2。所以这里是倒着回去看的。
{//c[i][j]==c[i-1][j-1]+1证明是从左上角下来的也就是说,左上角位置的a[i-1]和b[j-1]末尾相同。
lcs[--k] = a[i-];//先将k--再用是因为存数据的时候从0开始.
i--;
j--;
}
else if(a[i-]!=b[j-]&&c[i-][j]>c[i][j-]) i--;//看上方图就能明白。
else j--;
}
printf("%s\n",lcs);
return ;
}
最长公共子序列Lcs (51Nod - 1006)的更多相关文章
- 51Nod 1006:最长公共子序列Lcs(打印LCS)
1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...
- 51nod 1006 最长公共子序列Lcs 【LCS/打印path】
1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...
- 51nod 1006:最长公共子序列Lcs
1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...
- 1006 最长公共子序列Lcs
1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdks ...
- 动态规划之最长公共子序列LCS(Longest Common Subsequence)
一.问题描述 由于最长公共子序列LCS是一个比较经典的问题,主要是采用动态规划(DP)算法去实现,理论方面的讲述也非常详尽,本文重点是程序的实现部分,所以理论方面的解释主要看这篇博客:http://b ...
- 编程算法 - 最长公共子序列(LCS) 代码(C)
最长公共子序列(LCS) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 给定两个字符串s,t, 求出这两个字符串最长的公共子序列的长度. 字符 ...
- C++版 - Lintcode 77-Longest Common Subsequence最长公共子序列(LCS) - 题解
版权声明:本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C++版 - L ...
- POJ 1458 Common Subsequence(最长公共子序列LCS)
POJ1458 Common Subsequence(最长公共子序列LCS) http://poj.org/problem?id=1458 题意: 给你两个字符串, 要你求出两个字符串的最长公共子序列 ...
- 每日一题-——最长公共子序列(LCS)与最长公共子串
最长公共子序列(LCS) 思路: 代码: def LCS(string1,string2): len1 = len(string1) len2 = len(string2) res = [[0 for ...
- 51nod 1006 最长公共子序列Lcs(经典动态规划)
传送门 Description 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是 ...
随机推荐
- PAT 1036 Boys vs Girls
#include <cstdio> #include <iostream> #include <cstdlib> #include <algorithm> ...
- scss-传递内容块到@mixin
样式块被传递给混入用于放置内的样式.在@content指令的位置,样式被包含进mixin. 内容块被传递到块被定义一个混合的范围进行计算. 下面的例子演示了mixin使用内容块的SCSS代码: @mi ...
- Don't forget, a person's greatest emotional need is to feel appreciated.
Don't forget, a person's greatest emotional need is to feel appreciated.莫忘记,人类情感上最大的需要是感恩.
- 《ArcGIS Runtime SDK for Android开发笔记》——(12)、自定义方式加载Bundle格式缓存数据
随着ArcGIS 10.3的正式发布,Esri推出了新的紧凑型缓存格式以增强用户的访问体验.新的缓存格式下,Esri将缓存的索引信息.bundlx包含在了缓存的切片文件.bundle中.具体如下图所示 ...
- centos7部署ethereum私有链
https://github.com/ethereum/go-ethereum/wiki http://book.8btc.com/books/6/ethereum/_book/public-chai ...
- Python新式类 单例模式与作用域(四)
1 新式类与旧式类 新式类拥有经典类的全部特性之外,还有一些新的特性,比如 __init__发生变化,新增了静态方法__new__,python3目前都采用新式类,新式类是广度优先,旧式类是深度优先 ...
- 【css基础】html图片右上角加上删除按钮
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- expdp指定时间戳导出防止数据不一致
expdp scott/tiger DIRECTORY=dump DUMPFILE=a.dmp FLASHBACK_TIME=“TO_TIMESTAMP(’25-08-2004 14:35:00’,’ ...
- February 24 2017 Week 8 Friday
If you fail, don't forget to learn your lesson. 如果你失败了,千万别忘了汲取教训. Frankly speaking, it is easy to ta ...
- Android(java)学习笔记52:成员位置的内部类的介绍
1. 内部类的定义 /* 内部类概述: 把类定义在其他类的内部,这个类就被称为内部类. 举例:在类A中定义了一个类B,类B就是内部类. 内部的访问特点: A:内部类可以直接访问外部类的成员,包括私有. ...