神奇彩带KMP
有两条彩带A,B,如果能制作出一条彩带,这条彩带既是彩带A的前缀,又是彩带B的后缀,称之为神奇彩带
草滩小王子想送一条最长的神奇彩带给拉面女神
给你两条彩带,你能找到最大的神奇彩带的长度是多少吗?
( 如果你不知道什么是前缀和后缀,我只能呵呵一下,然后向你解释: 对于串abcd 它有前缀a ab abc abcd 它有后缀 d cd bcd abcd 你懂了吧)
例子:
彩带A: ssyybbb
彩带B: kkkssyy
可以找到彩带C:ssyy
既是 A的前缀,又是B的后缀 所以C是神奇彩带,而且是最长的。
那么最大长度为4
输入包含多组数据, 每组数据有两行,每行仅有一个字符串,长度不超过50000
对于每组数据 输出最长的神奇彩带的长度
ssyybbb kkkssyy aaaab aaaa kkksss jhkk aaaaaaa aaaaaaa aaaaabb bbbbbaa baakki sdbaa
4 4 2 7 2 3
#include<cstdio>
#include<cstring>
#define N 50005
using namespace std;
int main()
{
char a[N],b[N];
int match[N];
int i,j,p;
while(~scanf("%s%s",a,b))
{
int lena=strlen(a);
int lenb=strlen(b);
memset(match,0,sizeof(match));
for(i=1,j=0;i<lena;i++)//构建部分匹配表
{
if(a[j]==a[i])
{
match[i]=match[i-1]+1;
j++;
}
else
j=0;
}
for(p=0;p<lenb;p++)
{
for(i=0,j=p;i<lenb-p;i++,j++)
{
if(a[i]!=b[j])
{
if(i)
p+=i-match[i-1]-1;//移动位数=已匹配字符串数-对应部分匹配值
break;
}
}
if(i==lenb-p)
break;
}
printf("%d\n",i);
}
return 0;
}
神奇彩带KMP的更多相关文章
- UVA 10298 Power Strings 字符串的幂(KMP,最小循环节)
题意: 定义a为一个字符串,a*a表示两个字符相连,即 an+1=a*an ,也就是出现循环了.给定一个字符串,若将其表示成an,问n最大为多少? 思路: 如果完全不循环,顶多就是类似于abc1这样, ...
- 字符串(2)KMP算法
给你两个字符串a(len[a]=n),b(len[b]=m),问b是否是a的子串,并且统计b在a中的出现次数,如果我们枚举a从什么位置与匹配,并且验证是否匹配,那么时间复杂度O(nm), 而n和m的范 ...
- CHD 2014迎新杯比赛题解
A. 草滩的魔法学校 分析: 高精度乘法 或 JAVA大数类 很明显 10000 的阶乘已经远远超过 64 位数能表示的范围了.所以我们要用一个比较大的数组来存放这个数.那数组要开多少位合适呢?我们不 ...
- 神奇的字符串匹配:扩展KMP算法
引言 一个算是冷门的算法(在竞赛上),不过其算法思想值得深究. 前置知识 kmp的算法思想,具体可以参考 → Click here trie树(字典树). 正文 问题定义:给定两个字符串 S 和 T( ...
- 【HDU3374】 String Problem (最小最大表示法+KMP)
String Problem Description Give you a string with length N, you can generate N strings by left shift ...
- HDU 5782 Cycle(KMP+Hash)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5782 [题目大意] 给出两个字符串,判断他们每一个前缀是否循环同构,循环同构的意思就是,字符串首位 ...
- 完全掌握KMP算法思想
文档下载页面http://download.csdn.net/detail/yedeqixian/4209500 80页在讲KMP算法的开始先举了个例子,让我们对KMP的基本思想有了最初的认 ...
- 扩展KMP——算法总结,来自于 迷路的鸽子
扩展kmp LRH 所谓扩展kmp指的是与kmp相似的求辅助数组的原理,但是本身与kmp关系不大. 1.exkmp的用途:给定一个主串s和一个子串t,求出s中每一个后缀 ...
- 扩展kmp——原创
扩展kmp LRH 所谓扩展kmp指的是与kmp相似的求辅助数组的原理,但是本身与kmp关系不大. 1.exkmp的用途:给定一个主串s和一个子串t,求出s中每一个后缀 ...
随机推荐
- hduoj----1142A Walk Through the Forest(记忆化搜索+最短路)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- eclipse中 起动tomcat时报Multiple Contexts have a path of "/shopping"
eclipse中 启动tomcat时报Multiple Contexts have a path of "/shopping". 这个是由于你的server服务器中的server. ...
- Android receiver
可以在代码文件中声明一个receiver,也可以在manifest中声明一个,前者中的receiver只有在该activity launch起来以后才会监听其所感兴趣的事件, 而如果在androidM ...
- Mysql 字符串处理函数
函数: 1.从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my ...
- iOS应用程序间共享数据
我们知道iOS由于沙盒的存在,应用程序不能越过自己的区域去访问别的存储空间的内容,不过可能有许多场景我们需要在应用程序之间共享数据,比如多个应用共用用户名密码进行登录等.虽然我们不能直接通过文件系统来 ...
- Android调用远程Service的参数和返回值都需要实现Parcelable接口
import android.os.Parcel;import android.os.Parcelable; public class Person implements Parcelable{ pr ...
- 统计查询-sql
select --总注册人数(select COUNT(*) from [YYD_Users_RegInfo]) as TotalCount,--pc端注册人数(select COUNT(*) fro ...
- iOS各种动画效果
ios各种动画效果 最普通动画: //开始动画 [UIView beginAnimations:nil context:nil]; //设定动画持续时间 [UIView setAnimationDu ...
- SAP iDoc 概念及管理
创建IDOC: 第一步:WE31 创建IDOC所包含的字段. 第二步:WE30 创建IDOC 把Segment分配给IDOC 第三步:WE81 创建信息类型 第四步:WE82 把 ...
- 3.2 Git 分支 - 分支的新建与合并
分支的新建与合并 现在让我们来看一个简单的分支与合并的例子,实际工作中大体也会用到这样的工作流程: 开发某个网站. 为实现某个新的需求,创建一个分支. 在这个分支上开展工作. 假设此时,你突然接到一个 ...