题目链接: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. 在浏览器中使用Javascript

    在浏览器中点击鼠标右键——检查,选择console,可以在里面写Javascript代码,并可以在页面实时看到结果: 关于JavaScript的几个注意事项: JavaScript 语句和 JavaS ...

  2. mysql 开源~canal维护相关问题

    一 简介:咱们来讨论下canal的一些技巧 二 场景 场景1 canal过滤指定库后,后端java调用读取相关数据时候出现大量的空事务,为何会出现空事务呢,空事务是由于配置了指定的过滤规则,导致了其他 ...

  3. python正则表达式一[转]

    原文:http://blog.jobbole.com/74844/ 作为一个概念而言,正则表达式对于Python来说并不是独有的.但是,Python中的正则表达式在实际使用过程中还是有一些细小的差别. ...

  4. float/double 浮点数据*100精度丢失问题

    工作中微信支付碰到的一个问题,金额是float数字,微信参数需要分且必须是整数,所以*100的时候就有问题了 System.out.println(9.9f*100); //989.99994Syst ...

  5. canny 算子python实现

    1. Canny介绍 Canny算子与Marr(LoG)边缘检测方法类似,也属于是先平滑后求导数的方法.John Canny研究了最优边缘检测方法所需的特性,给出了评价边缘检测性能优劣的三个指标: 1 ...

  6. Python之matplotlib库学习

    matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备, ...

  7. 手把手教你写makefile【原创】

    Makefile  编写 Make  -f  makefile1 指定 如下是 本人的一点makefile学习笔记,再分享一个不错的写makefile总结的网址: http://www.cnblogs ...

  8. unicode 和 utf-8字符编码的区别

    作者:于洋链接:https://www.zhihu.com/question/23374078/answer/69732605来源:知乎著作权归作者所有,转载请联系作者获得授权.   原文:unico ...

  9. hostapd 和 wap_supplicant

    hostapd : user space daemon for access points, including, e.g., IEEE 802.1X/WPA/EAP Authenticator fo ...

  10. asp.net core 操作误区

    更新时提示数据变化错误 在更新事件中提示下面错误,在网上找了一下,大部分都是说是冲突问题,但是测试时同时只有一个客户端在进行操作,不应该会有冲突问题,后来发现编辑加载时的ID,和更新提交时的ID不同了 ...