1006 最长公共子序列Lcs

基准时间限制:1 秒 空间限制:131072 KB

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

比如两个串为:

abcicba

abdkscab

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

Input

第1行:字符串A

第2行:字符串B

(A,B的长度 <= 1000)

Output

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

Input示例

abcicba

abdkscab

Output示例

abca

import java.util.Scanner;
import java.util.Stack;
public class Main {
static int dp[][];
static char a[];
static char b[];
static void LCS(int n,int m){ for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i-1]==b[j-1])dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=Math.max(dp[i][j-1], dp[i-1][j]);
}
}
} public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
a=sc.next().toCharArray();
b=sc.next().toCharArray();
int len1=a.length;
int len2=b.length;
dp=new int[len1+1][len2+1];
LCS(len1,len2); Stack<String > stack=new Stack<String>();
int i=len1,j=len2;
while(dp[i][j]!=0){
if(dp[i][j]==dp[i-1][j])i--;
else if(dp[i][j]==dp[i][j-1])j--;
else {stack.push(a[i-1]+"");i--;j--;} }
String ans="";
while(!stack.isEmpty()){
ans+=stack.pop();
}
System.out.println(ans); }
sc.close(); } }

1006 最长公共子序列Lcs

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏  关注

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

比如两个串为:

abcicba

abdkscab

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

Input

第1行:字符串A

第2行:字符串B

(A,B的长度 <= 1000)

Output

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

Input示例

abcicba

abdkscab

Output示例

abca

*/

import java.util.Scanner;

import java.util.Stack;

public class Main {

static int dp[][];

static char a[];

static char b[];

static void LCS(int n,int m){

for(int i=1;i<=n;i++){

for(int j=1;j<=m;j++){

if(a[i-1]==b[j-1])dp[i][j]=dp[i-1][j-1]+1;

else

dp[i][j]=Math.max(dp[i][j-1], dp[i-1][j]);

}

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc=new Scanner(System.in);

while(sc.hasNext()){

a=sc.next().toCharArray();

b=sc.next().toCharArray();

int len1=a.length;

int len2=b.length;

dp=new int[len1+1][len2+1];

LCS(len1,len2);

Stack<String > stack=new Stack<String>();

int i=len1,j=len2;

while(dp[i][j]!=0){

if(dp[i][j]==dp[i-1][j])i--;

else if(dp[i][j]==dp[i][j-1])j--;

else {stack.push(a[i-1]+"");i--;j--;}

}

String ans="";

while(!stack.isEmpty()){

ans+=stack.pop();

}

System.out.println(ans);

}

sc.close();

}

}

1006 最长公共子序列Lcs的更多相关文章

  1. 51nod 1006 最长公共子序列Lcs 【LCS/打印path】

    1006 最长公共子序列Lcs  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...

  2. 51nod 1006 最长公共子序列Lcs(经典动态规划)

    传送门 Description 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的).   比如两个串为:   abcicba abdkscab   ab是两个串的子序列,abc也是 ...

  3. 【51NOD】1006 最长公共子序列Lcs(动态规划)

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为:   abcicba abdkscab   ab是两个串的子序列,abc也是,abca也是,其中abca是这两个 ...

  4. 51Nod - 1006 最长公共子序列Lcs模板

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的).   比如两个串为:   abcicba abdkscab   ab是两个串的子序列,abc也是,abca也是,其中abca是这 ...

  5. 51Nod 1006 最长公共子序列Lcs问题 模板题

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为:   abcicba abdkscab   ab是两个串的子序列,abc也是,abca也是,其中abca是这两个 ...

  6. 51NOD 1006 最长公共子序列 Lcs 动态规划 DP 模板题 板子

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最 ...

  7. 51 nod 1006 最长公共子序列Lcs

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1006 参考博客 :http://blog.csdn.net/yysdsy ...

  8. 【51NOD-0】1006 最长公共子序列Lcs

    [算法]经典DP [题解]经典lcs,输出路径可以记录上一个有效节点就是有点麻烦. 因为开始时写法不太明确,打印结果时初始循环地方搞错了,后来修正写法时忘了改过来,调了好久. #include< ...

  9. 【模板】51nod 1006 最长公共子序列Lcs

    [题解] dp转移的时候记录一下,然后倒着推出答案即可. #include<cstdio> #include<cstring> #include<algorithm> ...

随机推荐

  1. 学习C# XmlSerializer 序列化反序列化XML

    类.变量常用头: [XmlRootAttribute]:对根节点的描述,在类声明中使用 如:下例的Html类 [XmlType]:对节点描述,在类声明中使用         如:下例的Head类 [X ...

  2. BZOJ3322 : [Scoi2013]摩托车交易

    求出最大生成树,则两点间的最大容量为树上两点间的边权的最小值. 设$lim[i]$表示第$i$个订单的城市允许携带的黄金上限,则 $lim[i]=\min(lim[i+1],a[i]和a[i+1]点间 ...

  3. 【转】Eclipse Plugin 在 Console上打印出message

    org.eclipse.ui.console 转自:http://blog.csdn.net/rujielaisusan/article/details/4505188 首先这里主要用到的是org.e ...

  4. 产品原型设计工具 Balsamiq Mockups(转)

    Balsamiq Mockups是产品设计师绘制线框图或产品原型界面的利器.在产品设计的需求阶段,低保真的线框图或者草图设计介于产品流程设计与高保真DEMO设计之间,在Balsamiq Mockups ...

  5. xubuntu12.04配置

    更改源:我用上海交通大学的 首先备份Ubuntu12.04源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup   #(备份下当前 ...

  6. shell运算

  7. The Storage Situation: Removable Storage

    http://commonsware.com/blog/2014/04/09/storage-situation-removable-storage.html There is a lot of co ...

  8. [转]Visual Studio 实用扩展推荐

    本文转自 http://www.cnblogs.com/stg609/p/3726898.html Visual Studio 拥有非常不错的可扩展性,在之前的文章中,我也给大家示范了如何进行编辑器的 ...

  9. MasterPage 变化了的 ClientID ctl00_

    在母版页的服务器端控件 其客户端ID 有时候是多变的 会对javascript jquery的内容获取 造成困扰 比如一个控件: <asp:ContentPlaceHolder ID=" ...

  10. 一些浏览器的USER-AGENT

    115浏览器的USER-AGENT 版本号:5.1.3.55 Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like G ...