大概的解题思路:循环移位可以靠指针来向后移动代替,循环左移和循环右移出来的结果集都是一样的,所以我选择全部向右移动。
首先找到与第一个元素相同的元素的位置,向后比较,看是否全部相同,如果全部相同者是亲和串。如果不是全相相同,则向后查找下一个与第一个元素相同的元素位置,一直下去,直到找不到这样的元素为止。
ac代码:
#include<iostream>
#include<string>
using namespace std;
#define M 100000
char s1[M],s2[M],s3[2*M];
int main()
{
while(cin>>s1)
{
cin>>s2;
char *p;
int i,len=strlen(s1);
strcpy(s3,s1);
for(i=len;i<2*len;++i)
s3[i]=s1[i-len];
p=strstr(s3,s2);
if(p) cout<<"yes"<<endl;
else cout<<"no"<<endl;
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
memset(s3,0,sizeof(s3));
}
}