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

来源:互联网 发布:内窥镜图文工作站软件 编辑:程序博客网 时间:2024/06/04 00:33

#include <stdio.h>#include <stdlib.h>#include <string.h>int next[1000000];void getnext(char s[]){   int j=0,k=-1,len=strlen(s);   next[0]=-1;   while(j<len)   {       if(k==-1||s[j]==s[k])       {          j++;          k++;          next[j]=k;       }       else       {          k=next[k];       }   }}int kmp(char s1[],char s2[]){   int i=0,j=0,len1=strlen(s1),len2=strlen(s2);   while(i<len1&&j<len2)   {       if(j==-1||s1[i]==s2[j])       {         i++;         j++;       }       else       {        j=next[j];       }   }   if(s2[j]=='\0')   {     return i-len2+1;   }   return -1;}int main(){    char s1[1000000],s2[1000000];    int x;    while(gets(s1)!=NULL)    {       gets(s2);       getnext(s1);       x=kmp(s1,s2);       printf("%d\n",x);    }    return 0;}

题目描述

给定两个字符串string1和string2,判断string2是否为string1的子串。

输入

 输入包含多组数据,每组测试数据包含两行,第一行代表string1(长度小于1000000),第二行代表string2(长度小于1000000),string1和string2中保证不出现空格。

输出

 对于每组输入数据,若string2是string1的子串,则输出string2在string1中的位置,若不是,输出-1。

示例输入

abca12345645abcddd

示例输出

14

-1

0 0
原创粉丝点击