题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503

题目大意:

给两个字符串,组成一个长度尽可能小的字符串,它包含上述两个字符串,且原字符串中的字符在该串中的相对位置不变。

Sample Input
apple peach
ananas banana
pear peach
 
Sample Output
appleach
bananas
pearch
 
解题思路:
要结合样例来理解题意,本题主要难在如何输出题目要求字符串,这就需要我们仔细研究样例,去发掘它是如何输出的,具体操作见代码。
 
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
int dp[][];
int vis[][]; //标记路径
int loca[], locb[]; //记录下最长公共子序列在这两个字符串中的位置
int lena, lenb; //a,b序列的长度
int len; //记录下最长公共子序列长度
string stra, strb; void locallcs(int i, int j) //标记好最长公共子序列的每一个字符分别在a,b字符中的位置
{
len = ;
while (i>&&j>)
{
if (vis[i][j] == )
{
loca[len] = i-; // 此时loca,locb数组记录的是最长公共子序列分别在啊a,b字符串中的位置
locb[len] = j-; //不过要注意此时记录的是逆序的,这个仔细看它存入的顺序就能明白
len++;
i--, j--;
}
else if (vis[i][j] == )j--;
else
i--;
}
} void output() //输出答案,至于为什么是这样输出,自己仔细研究题目的输出样例就能发现
{
int inverse = len - ;
int cur1 = ,cur2=;
while (inverse >= )
{
for (int i = cur1; i<loca[inverse]; i++) //输出a中两个相邻的公共子序列字符之间的字符
printf("%c", stra[i]);
for (int j = cur2; j < locb[inverse]; j++)
printf("%c", strb[j]);
printf("%c", stra[loca[inverse]]); //输出那个公共字符
cur1 = loca[inverse]+, cur2=locb[inverse]+;
inverse--;
}
for (int i = loca[]+; i < lena; i++)printf("%c", stra[i]); //输出最后一个公共子序列字符之后的字符
for (int j = locb[]+; j < lenb; j++)printf("%c", strb[j]);
cout << endl;
} int main()
{
while (cin >> stra >> strb)
{
lena = stra.length();
lenb = strb.length();
for (int i = ; i <= lena; i++)
{
for (int j = ; j <= lenb; j++)
{
if (!i || !j) {
dp[i][j] = ; continue;
}
if (stra[i - ] == strb[j - ])
{
dp[i][j] = dp[i - ][j - ] + ;
vis[i][j] = ; //标记输出路径
}
else if (dp[i - ][j] < dp[i][j - ]) //dp数组在本题起控制标记路径方向的作用
{
dp[i][j] = dp[i][j - ];
vis[i][j] = ;
}
else {
dp[i][j] = dp[i - ][j];
vis[i][j] = ;
}
}
}
locallcs(lena, lenb);
output();
}
return ;
}
 
2018-05-19

HDU 1503【LCS】(字符串合并输出)的更多相关文章

  1. hdu 1503 LCS输出路径【dp】

    hdu 1503 不知道最后怎么输出,因为公共部分只输出一次.有人说回溯输出,感觉好巧妙!其实就是下图,输出的就是那条灰色的路径,但是初始时边界一定要初始化一下,因为最第一列只能向上走,第一行只能向左 ...

  2. Advanced Fruits(HDU 1503 LCS变形)

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  3. hdu 1503, LCS variants, find a LCS, not just the length, backtrack to find LCS, no extra markup 分类: hdoj 2015-07-18 16:24 139人阅读 评论(0) 收藏

    a typical variant of LCS algo. the key point here is, the dp[][] array contains enough message to de ...

  4. 题解报告:hdu 1503 Advanced Fruits(LCS加强版)

    Problem Description The company "21st Century Fruits" has specialized in creating new sort ...

  5. HDU 1503 Advanced Fruits (LCS,变形)

    题意: 给两个水果名,要求他们的LCS部分只输出1次,其他照常输出,但是必须保持原来的顺序! 思路: 求LCS是常规的,但是输出麻烦了,要先求LCS,再标记两串中的所有LCS字符,在遇到LCS字符时, ...

  6. 华为OJ:字符串合并处理

    字符串合并处理 按照指定规则对输入的字符串进行处理. 详细描述: 将输入的两个字符串合并. 对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序.这里的下标意思是字符在 ...

  7. Java实现 蓝桥杯 算法训练 字符串合并

    试题 算法训练 字符串合并 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输入两个字符串,将其合并为一个字符串后输出. 输入格式 输入两个字符串 输出格式 输出合并后的字符串 样例 ...

  8. 优化php代码 - 字符串echo输出 逗号也可作php连接符

    2016年12月12日10:00:16 ====================== 网页访问速度的提升,是可以通过代码的优化来实现的.代码的优化,并不是说代码越少越好,而是主要看代码的运行能力和执行 ...

  9. HDU 1274 展开字符串 (递归+string类)

    题目链接:HDU 1274 展开字符串 中文题. 左括号进入DFS函数,右括号return到上一层. 注意return回去的是这个一层递归中的括号中的字母串. AC代码: #include<st ...

随机推荐

  1. SpringAOP深入学习

    ----------------------Spring AOP介绍------------------ 1.编程范式概念 面向过程编程:C 面向对象编程:c++,Java 函数式编程 事件驱动编程: ...

  2. SSH开发环境搭建

    断断续续学习hibernate也有一段时间了,在这里研究一下SSH开发环境的搭建过程,自己简单的搭建一个SSH的开发环境.采用maven搭建. 0.项目结构: 1.导包:(maven项目) pom.x ...

  3. C# ASP.NET MVC 配置允许跨域访问

    在web.config文件中的 system.webServer 节点下 增加如下配置 <httpProtocol> <customHeaders> <add name= ...

  4. Linux下的换行符\n\r以及txt和word文档的使用

    Linux doc WINDOWS下记事本编写的文档和LINUX下VIM或者GEDIT等编写的文档的不同! 例如WINDOWS下编写的SH脚本,放到LINUX下执行可能会出错. 解决方法: 原因是:W ...

  5. 扫AR

  6. php学习之mysqli的面向对象

    // mySqlTool.php  封装好的工具类 <?php class SqlTool{ private $conn; private $host="localhost" ...

  7. win7安装Ubuntu变双系统以及删除Ubuntu分区操作

    Window7系统基础上安装Ubuntu使构成双系统,整个过程如下: 1. 一块空闲磁盘分区准备. “我的电脑”右键 > 管理 > 磁盘管理 > 压缩(从有空余分区压缩)/删除(删除 ...

  8. 记录entityframework生成的sql语句

    Interceptors (EF6.1 Onwards) Starting with EF6.1 you can register interceptors in the config file. I ...

  9. 03-MySql安装和基本管理

    本节掌握内容: MySQL的介绍安装.启动 windows上制作服务 MySQL破解密码 MySQL中统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 O ...

  10. Ex 6_2 假设您准备一次长途旅行..._第五次作业

    假设n个旅馆距离原点的距离存放在数组arr[0. . .n-1]中,punish[0. . .n-1]表示在某个旅馆停留时所受的的惩罚的最小值.当然在第一个旅馆停留时所受到的惩罚为0,即punish[ ...