大概的解題思路:循環移位可以靠指針來向後移動代替,循環左移和循環右移出來的結果集都是一樣的,所以我選擇全部向右移動。
首先找到與第一個元素相同的元素的位置,向後比較,看是否全部相同,如果全部相同者是親和串。如果不是全相相同,則向後查找下一個與第一個元素相同的元素位置,一直下去,直到找不到這樣的元素爲止。
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));
}
}