AABCD CDAA ASD ASDF
yes no
思路:
先将s1的字符串长度扩大到大于等于s2,然后再将s1的长度扩大一倍,判断s2是否为s1的子串。
求一个串轮回后是否包含别的一个串,其实只要将母串反复一次再进行KMP匹配就行了,因为在反复母串的过程中,其实据已经将轮回后的所有可能都列举出来了。
#include<bits/stdc++.h> using namespace std; const int maxn=500000; char s1[maxn],s2[maxn],s3[maxn]; int main(){ while(scanf("%s%s",s1,s2)!=EOF){ int len1=strlen(s1),len2=strlen(s2); while(len1<len2){ strcpy(s3,s1); strcat(s1,s3); len1+=len1; } strcpy(s3,s1); strcat(s1,s3); len1+=len1; if(strstr(s1,s2)!=NULL) printf("yes\n"); else printf("no\n"); } return 0; }