您的位置:首页 > 其它

HDU 2594(Simpsons’ Hidden Talents)字符串匹配-KMP

2015-09-01 11:00 288 查看
题目要求串1的前缀与串2的后缀相同的最大长度。

先将两个字符串合并,求出NEXT数组。

根据NEXT数组的性质(下标1~N),NEXT的大小即为前后缀的最大相同长度。

注意LEN<=min(A.LEN,B.LEN).

代码:

#include<stdio.h>
#include<string.h>

char sp[100010],sb[50010];
int next[100010];

void Getnext(int len)
{
int i,j;
i=0,j=-1;
next[0]=-1;
while(i<len)
{
if(j==-1 || sp[i]==sp[j])
{
i++;
j++;
next[i]=j;
}
else j=next[j];
}
}

int min(int a,int b)
{
return a<b?a:b;
}

int main()
{
int len,i,len1,len2,ans;
while(scanf("%s",&sp)!=EOF)
{
scanf("%s",&sb);
len1=strlen(sp);
len2=strlen(sb);
strcat(sp,sb);
len=strlen(sp);
Getnext(len);

ans=next[len];
if(ans>len1 || ans>len2)
{
ans=min(len1,len2);
}
for(i=0;i<=ans-1;i++)
printf("%c",sp[i]);
if(ans>=1)printf(" ");
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  KMP 字符串匹配