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

来源:互联网 发布:部落冲突箭塔数据 编辑:程序博客网 时间:2024/06/06 00:30


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

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

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

Hint

 

Author

cjx
#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>using namespace std ;int next[1000001] ;char string1[1000011] , string2[1000011] ;void get_next(char a[],int l1){    int i = 0 , j = -1;    next[0]=-1;    while(i<l1)    {        if(j==-1||a[i]==a[j])        {            i++;            j++;            if(a[i]!=a[j])                next[i]=j;            else                next[i] = next[j] ;        }        else            j = next[j] ;    }}int kmp(char a[] , char b[] , int l1 , int l2){    int i = 0 ;    int j = 0 ;    while(i<l1&&j<l2)    {        if(j==-1||a[i]==b[j])        {            ++i;            ++j;        }        else            j = next[j] ;    }    if(j>=l2)        return i - l2 +1 ;    else        return -1 ;}int main(){    int len1 , len2 ;    while(cin>>string1>>string2)    {        len1 = strlen(string1);        len2 = strlen(string2);        get_next(string2,len2);        int k = kmp(string1,string2,len1,len2);        cout << k << endl ;    }    return 0 ;}

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

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

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

Hint

 

Author

cjx
0 0
原创粉丝点击