AABCD CDAA ASD ASDF
yes no
简单的KMP应用,只要把母串复制一遍再用KMP即可,练习模板~
#include <stdio.h> #include <string.h> char a[200005]; char b[100005]; int p[100005]; int n,m; void Pre() { int i,j; j=-1; p[0]=-1; for (i=1;i<m;i++) { while(j>=0 && b[j+1]!=b[i]) j=p[j]; if (b[j+1]==b[i]) j++; p[i]=j; } } bool Solve() { int i,j; j=-1; for (i=0;i<n;i++) { while(j>=0 && b[j+1]!=a[i]) j=p[j]; if (b[j+1]==a[i]) j++; if (j==m-1) return true; } return false; } int main() { int i,j; while(scanf("%s",a)!=EOF) { scanf("%s",b); n=strlen(a); m=strlen(b); j=n; for (i=0;i<n;i++) { a[j++]=a[i]; } a[j]='\0'; n=strlen(a); Pre(); if (Solve()==true) printf("yes\n"); else printf("no\n"); } return 0; }