51Nod--1006
来源:互联网 发布:鬼来电 知乎 编辑:程序博客网 时间:2024/05/16 17:03
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示例
abcicbaabdkscab
Output示例
abca
解体思路:
先跑LCS,注意开始的下标。多出来一行一列。其实不用flag[][]数组标记位置,回溯的时候再判断,这道
题也能做,但容易超时,因为需要重新比较,方向也不能完全确定。所以以空间换时间,开辟新的数组
标记,分为3个不同的方向来源,1代表左上,2代表正上,3代表正左,这样倒推求序列的时候方向就
能够唯一确定下来,减少了不必要的比较计算和重新探索。
源代码:
<span style="font-size:18px;">#include<iostream>#include<stdio.h>#include<algorithm>#include<string.h>#include<cstring>#include<string>using namespace std;char a[1005];char b[1005];char c[1005];//用来保存结果int dp[1005][1005];int flag[1005][1005];int index;void LCS(int len_a, int len_b){ memset(dp,0,sizeof(dp)); memset(flag,0,sizeof(flag)); int i,j; for(i = 1; i <= len_a; i++) { for(j = 1; j <= len_b; j++) { if(a[i - 1] == b[j - 1]) { dp[i][j] = dp[i - 1][j - 1] +1; flag[i][j] = 1; } else if(dp[i][j - 1] > dp[i - 1][j]) { dp[i][j] = dp[i][j - 1]; flag[i][j] = 2; } else { dp[i][j] = dp[i - 1][j]; flag[i][j] = 3; } } }}void getLCS(int n, int m){ while(n>0&&m>0) { if(flag[n][m] == 1) { c[index++] = a[n - 1]; n--; m--; } else if(flag[n][m] == 2) { m--; } else if(flag[n][m] == 3) { n--; } }}void printLCS(){ int i; for(i = index - 1; i >= 0; i--) printf("%c",c[i]); printf("\n");}int main(){ int len_a,len_b; scanf("%s%s",a,b); len_a = strlen(a); len_b = strlen(b); LCS(len_a, len_b); index = 0;//结果的下标 getLCS(len_a, len_b); printLCS(); return 0;}</span>
1 0
- 51nod 1006
- 51Nod--1006
- 51Nod
- 51Nod
- 51nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- 51Nod
- QQ分享失败:请检查网络并重试
- Spring MVC基于hibernate validator的数据验证示例
- 一个支持多屏显示的程序
- scala和java集合互相转换
- 2016.8.16 初中部提高c组模拟赛
- 51Nod--1006
- HandleMessage更新UI
- 谈谈渲染,玩玩nginx——前后端分离,转发请求到Tomcat的尝试
- 【简便操作】Eclipse全键盘编码攻略
- log4net 按天与按小时记日志的配置
- Android Studio 多渠道打包
- 【深入理解java集合系列】HashSet实现原理
- 数据结构 (线段树入门) HDU 1166 敌兵布阵(单点更新)
- CRC校验详解