您的位置:首页 > 理论基础 > 数据结构算法

SDUT2772数据结构实验之串一:KMP简单应用

2016-08-03 19:43 232 查看
#include<stdio.h>
#include<string.h>
void get_nextval(char pattern[],int next[])
{
int j=0,k=-1;
next[0]=-1;
while(pattern[j]!='\0')
{
if(k==-1||pattern[j]==pattern[k])
{
j++;
k++;
next[j]=k;
}
else
k=next[k];
}
}
int kmp(char text[],char pattern[])
{
if(text[0]=='\0'||pattern[0]=='\0')return -1;
int len=strlen(pattern);
int next[len+1];
get_nextval(pattern,next);
int index=0,i=0,j=0;
while(text[i]!='\0'&&pattern[j]!='\0')
{
if(text[i]==pattern[j])
{
i++;
j++;
}
else
{
index+=j-next[j];
if(next[j]!=-1)
j=next[j];
else
{
j=0;
i++;
}
}
}
if(pattern[j]=='\0')
return index+1;
else return -1;

}
int main()
{
char a[1000010];
char b[1000010];
int j;
while(scanf("%s",a)!=EOF)
{
scanf("%s",b);
printf("%d\n",kmp(a,b));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: