SDUT 2125 数据结构实验之串二:字符串匹配

来源:互联网 发布:计算机端口号 编辑:程序博客网 时间:2024/05/16 05:08

数据结构实验之串二:字符串匹配

Time Limit: 1000MSMemory Limit: 65536KB
SubmitStatistic Discuss

Problem Description

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

Input

 输入包含多组数据,每组测试数据包含两行,第一行代表string1,第二行代表string2,string1和string2中保证不出现空格。(string1和string2大小不超过100字符)
 

Output

 对于每组输入数据,若string2是string1的子串,则输出"YES",否则输出"NO"。
 

Example Input

abca12345645abcddd

Example Output

YESYESNO

Hint

思路同SDUT2772题
#include<cstdio>#include<cstring>#define INF 1000005using namespace std;int next[1000005];void getnext(char *s,int *next){    int j,k;    j=0;k=-1;    next[0]=-1;    int len=strlen(s);    while(j<len-1)    {        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;    getnext(s2,next);    int len1=strlen(s1);    int len2=strlen(s2);    while(i<len1&&j<len2)    {        if(j==-1||s1[i]==s2[j])        {            i++;            j++;        }        else j=next[j];//i不变,j后退。    }    if(j>=len2)        return (i-len2+1);    else        return -1;}int main(){    char str1[INF],str2[INF];    while(scanf("%s %s",str1,str2)!=EOF)    {        int num=kmp(str1,str2);        if(num==-1)        printf("NO\n");        else        printf("YES\n");    }    return 0;}


原创粉丝点击