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

来源:互联网 发布:sql的case when 编辑:程序博客网 时间:2024/06/02 03:18

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

Problem Description

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

Input

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

Output

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

Example Input

abca12345645abcddd

Example Output

14-1
-----------------------------------------------------------------------------------------------------
#include<stdio.h>#include<string.h>char s1[1000005], s2[1000005];int nextval[1000005];void getnextval(){    int len = strlen(s2);    int i = 0, j = -1;    nextval[0] = -1;    while(i < len){        if(j == -1 || s2[i] == s2[j]){            i++;j++;            if(s2[i] != s2[j]) nextval[i] = j;            else nextval[i] = nextval[j];        }        else j = nextval[j];    }}int kmp(){    int i = 0, j = 0;    int len1 = strlen(s1);    int len2 = strlen(s2);    while(i < len1 && j < len2){        if(j == -1 || s1[i] == s2[j]){            i++;j++;        }        else{            j = nextval[j];        }    }    if(j >= len2){        return i-j+1;    }    else return -1;}int main(){    while(~scanf("%s", s1)){        scanf("%s", s2);        getnextval();        printf("%d\n", kmp());    }    return 0;}


阅读全文
0 0
原创粉丝点击