51Nod 1006 - 最长公共子序列(Lcs)
来源:互联网 发布:js判断对象包含某个key 编辑:程序博客网 时间:2024/06/05 06:18
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
解题思路:
在输出的时候要从最后向前遍历,如果符合条件那么压栈.
AC代码:
#include<stdio.h>#include<string>#include<algorithm>#include<iostream>using namespace std;const int maxn = 1005;int dp[maxn][maxn];int main(){ string a; string b; cin >> a >> b; int len_a = a.size(); int len_b = b.size(); for(int i = 1;i <= len_a;i++) { for(int j = 1;j <= len_b;j++) { if(a[i-1] == b[j-1]) dp[i][j] = dp[i-1][j-1] + 1; else dp[i][j] = max(dp[i-1][j],dp[i][j-1]); } } int len = dp[len_a][len_b]; string ans; while(dp[len_a][len_b]) { if(dp[len_a][len_b] == dp[len_a-1][len_b]) len_a--; else if(dp[len_a][len_b] == dp[len_a][len_b-1]) len_b--; else ans.push_back(a[len_a-1]),len_a--,len_b--; } for(int i = len-1;i >= 0;i--) printf("%c",ans[i]); return 0;}
0 0
- 【51Nod】1006 - 最长公共子序列Lcs(LCS)
- 51nod 1006 最长公共子序列Lcs【LCS】
- lcs 51nod 1006 最长公共子序列Lcs
- 最长公共子序列Lcs 51Nod
- 最长公共子序列Lcs---51--Nod
- 51nod 1006 1006 最长公共子序列Lcs
- 51nod 1006:最长公共子序列Lcs
- 51Nod 1006 最长公共子序列Lcs(dp)
- 51Nod-1006-最长公共子序列Lcs
- [51nod]1006 最长公共子序列Lcs
- 51Nod 1006 最长公共子序列LCS DP水题
- 51Nod 1006 - 最长公共子序列(Lcs)
- 51nod 1006 最长公共子序列Lcs
- 51nod 1006 最长公共子序列Lcs
- 51Nod 1006 最长公共子序列Lcs
- 【51nod】1006 最长公共子序列Lcs
- 51Nod---1006-最长公共子序列Lcs
- 最长公共子序列(Lcs)51NOD-1006
- jdbc事务
- 腾讯2012实习生笔试题2+答案解析
- Android Studio 四大组件之一 Service简介
- openLayers3加载GeoWebCache发布ArcGIS切片
- Java-NowCoder-数字颠倒
- 51Nod 1006 - 最长公共子序列(Lcs)
- USACO 2.3 货币系统(背包/生成函数)
- uc/os-ii操作系统笔记
- Java中的数据储存位置
- hive权限控制介绍
- 动态SQL和动态PLSQL
- Java-NowCoder-字符串反转
- 使用php://input接收手机图片上传二进制流
- DSP5509A程序固化到Flash中用到的CMD脚本解析