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

SDUT数据结构实验之串三:KMP应用

2016-08-05 21:41 120 查看
#include<stdio.h>
#include<string.h>
int n,m;
int a[10000010];
int b[10000010];
void get_nextval(int pattern[],int next[])
{
int j=0,k=-1;
next[0]=-1;
while(j<m)
{
if(k==-1||pattern[j]==pattern[k])
{
j++;
k++;
next[j]=k;
}
else
k=next[k];
}
}
int kmp(int text[],int pattern[])
{
int index=0,i=0,j=0;
if(n==0||m==0)return -1;
//int len=strlen(pattern);
int next[m+1];
get_nextval(pattern,next);
while(i<n&&j<m)
{
if(text[i]==pattern[j])
{
i++;
j++;
}
else
{
index+=j-next[j];
if(next[j]!=-1)
j=next[j];
else
{
j=0;
i++;
}
}
}
if(j==m)
return index+1;
else return -1;
}
int main()
{

while(~scanf("%d",&n))
{
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=0; i<m; i++)
scanf("%d",&b[i]);
int k=kmp(a,b);
if(k!=-1)
{
int j=kmp(a+k,b);
if(j==-1)
printf("%d %d\n",k,k+m-1);
else
printf("-1\n");
}
else
printf("-1\n");

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: