HDU 2594 (next数组的用法)【KMP】
<题目链接>
题目大意:
给两个字符串,求第一串的前缀与第二串的后缀匹配的最长序列以及长度。
解题分析:
看到这个求前缀和后缀相同序列的最大长度,我们不难想到KMP中的next数组。做法就是, 将这两端序列合并,然后用next数组求出合并后序列的最长前缀后缀相同序列的最大值。但是要注意一点,如果该最大值比a,b字符串序列还要大,说明至少有一个序列的前缀或者后缀延伸到另一个序列了,这明显是不符合题意的,所以,此时我们直接输出最短序列的长度就好了,因为既然能够延伸到另一个序列,那么那个最短的序列一定全部满足,它的前缀或者后缀与另一个序列的后缀或者前缀的相同序列的最大值就是它自身的长度。
#include <cstdio>
#include <cstring> const int maxn = + ; char a[maxn << ], b[maxn];
int Next[maxn << ]; int min(int a, int b) { return a > b ? b : a; } void get_next()
{
int lenn = strlen(a);
int j = , k = -;
Next[] = -;
while (j < lenn)
{
if (k == - || a[j] == a[k])
{
Next[++j] = ++k;
}
else
k = Next[k];
}
} int main()
{
while (scanf("%s%s", &a, &b) != EOF)
{
int lena = strlen(a);
int lenb = strlen(b);
strcat(a, b);
get_next(); int lensum = strlen(a); int res = Next[lensum]; //res为合并后序列的前缀和后缀中相同字符串的最长长度
int len = min(lena, lenb);
res = min(len, res); //如果res>lena||res>lenb,直接输出最小的那个就行了
if (res == )
printf("0\n");
else
{
a[res] = '\0'; //将第res置为'\0',方便输出a的前缀
printf("%s %d\n", a, res);
}
}
return ;
}
2018-08-05
HDU 2594 (next数组的用法)【KMP】的更多相关文章
- HDU 2594 Simpsons’ Hidden Talents(KMP的Next数组应用)
Simpsons’ Hidden Talents Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- HDU 2594 Simpsons’ Hidden Talents (KMP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2594 这题直接用KMP算法就能够做出来,只是我还尝试了用扩展的kmp,这题用扩展的KMP效率没那么高. ...
- hdu 2594 Simpsons’ Hidden Talents 【KMP】
题目链接:http://acm.acmcoder.com/showproblem.php?pid=2594 题意:求最长的串 同一时候是s1的前缀又是s2的后缀.输出子串和长度. 思路:kmp 代码: ...
- hdu 2594 Simpsons’ Hidden Talents(扩展kmp)
Problem Description Homer: Marge, I just figured out a way to discover some of the talents we weren’ ...
- HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋)
HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 3 ...
- hdu 3948 后缀数组
The Number of Palindromes Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (J ...
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课
centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件.目录属性 shell数组简单用法 $( ) 和$ ...
- shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计
shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...
- HDU 2594 Simpsons’ Hidden Talents(KMP求s1前缀和s2后缀相同部分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2594 题目大意:给两串字符串s1,s2,,找到最长子串满足既是s1的前缀又是s2的后缀,输出子串,及相 ...
随机推荐
- 【libreoffice】libreoffice实现office转pdf、html、jpg等格式数据
其实libreoffice有好多功能,完全可以替代office 1.windows下将word转为pdf 1 安装libreoffice 到官网下载后安装即可.https://donate.libr ...
- char *与const char **函数参数传参问题
传参方法 ## 函数 extern void f2 ( const char ** ccc ); const char ch = 'X'; char * ch_ptr; const char ** c ...
- GPIO接口解析【转】
本文提供了一个linux下访问GPIO的约定的概述. 这些调用使用gpio_* 命名前缀.没有别的调用会使用这个前缀或是相关的__gpio_*前缀. 转自:http://blog.163.com/w5 ...
- awk技巧【转】
转自 awk技巧(如取某一行数据中的倒数第N列等) - 散尽浮华 - 博客园 https://www.cnblogs.com/kevingrace/p/8481965.html 使用awk取某一行数据 ...
- aiohttp分流处理
# -*- coding: utf-8 -*- # @Time : 2018/12/26 9:55 PM # @Author : cxa # @Software: PyCharm import asy ...
- 移动端rem单位适配使用
1.适配方法 //缩放比例!function(e,t){function i(){o=1,e.devicePixelRatioValue=o,s=1/o;var t=a.createElement(& ...
- 创建物理卷报错Can't open /dev/sdb5 exclusively. Mounted filesystem的问题解决过程记录
yum服务器lvm扩容,data目录是yum存放rpm包的目录,只有20G,需要添加磁盘扩容到80G # df -lh Filesystem Size Used Av ...
- android 知识点汇总
1.activity 它是 android 应用程序的基本功能单元.一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号.拍照.Activity 本身是没有 ...
- javascript 练习题目答案1
以下是这个教程的答案 https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143 ...
- vue系列之概念
一.模板引擎 通常出现在应用层,即服务器端(MVC层中的view) 客户端HTTP请求->应用层的控制器(Controller)->应用层的服务层(Service,访问数据库)->封 ...