您的位置:首页 > 其它

hdu2594Simpsons’ Hidden Talents

2016-07-29 16:14 274 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2594

给你两个串s1和s2,问你s2的后缀和s1的前缀相等的最长长度

把s2接在s1后面,求出nxt[]数组以后就结束了。。。

注意长度不要超

#include <stdio.h>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
char a[100020];
char b[100020];
int la,lb;
int nxt[100020];
void gnx(){
int i=0,j=-1;
nxt[0]=-1;
while(i<lb){
if(j==-1||b[i]==b[j])nxt[++i]=++j;
else j=nxt[j];
}
}
int main(void)
{
while(scanf("%s",b)!=EOF){
scanf("%s",a);
int la=strlen(b);
strcat(b,a);
lb=strlen(b);
gnx();
int ans=nxt[lb];
while(ans>la||ans>lb-la)ans=nxt[ans];
for(int i=0;i<ans;i++){
printf("%c",b[i]);
}if(ans>0)printf(" ");
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kmp 字符串