#include<stdio.h>
#include<string.h>
int next[105] = {0};
void get_next(char p[])
{
int len = strlen(p);
next[0] = -1;
int j;
for(j = 1; j < len; j++)
{
int i = next[j-1];
while(i >= 0 && p[i+1] != p[j])
i = next[i];
if(p[i+1] == p[j])
next[j] = i+1;
else
next[j] = -1;
}
}
int kmp(char s[], char p[])
{
int n = strlen(s);
int m = strlen(p);
int i = 0, j = 0;
while(i < n && j < m)
{
if(s[i] == p[j])
{
i++;
j++;
}
else if(j > 0)
j = next[j-1]+1;
else
i++;
}
return j == m ? 1 : 0;
}
int main()
{
char s[105], p[105];
scanf("%s%s", s, p);
get_next(p);
if(kmp(s, p))
printf("YES\n");
else
printf("NO\n");
return 0;
}
KMP
最新推荐文章于 2022-12-13 23:34:45 发布