题目:给定两字符串s1和s2,要求判断s2能否被s1做循环移位得到字符串包含。
思路:s1循环移位得到的其实是s1s1的子串,我们只需判断s1s1是否含有s2。
#include <iostream>
#include<string.h>
#include<assert.h>
using namespace std;bool find(const char * a,const char *b)
{
assert(a!=NULL&&b!=NULL);
int lena=strlen(a);
int lenb=strlen(b);
if(lena<lenb)
return false;
for(int i=0;i<=lena;i++)
{
int j=0;
for(;j<lenb;j++)
{
if(a[(i+j)%lena]!=b[j])
break;
}
if(j==lenb)
{
return true;
}
}
return false;
}
int main()
{
char s1[100]="AABCD";
char s2[100]="CDAA";
char s3[100]="ABCD";
char s4[100]="ACBD";
cout << find(s1,s2) << endl;
cout<<find(s3,s4)<<endl;
return 0;
}
输出结果:
1
0