#includeusing namespace std;//method1/*最直接的方法就是对src进行循环移位,再进行字符串包含的判断,从而遍历其所有的可能性。时间复杂度为O(N^2)*/bool isContain(char* src,char* des){ int len=strlen(src); for(int i=0;i ABCDA->ABCDAB->ABCDABC->ABCDABCD可以看出对s1做循环移位所得到的字符串都将是字符串s1s1的子字符串。如果s2可以由s1循环移位得到,那么s2一定在s1s1上。至此我们将问题转换成考察s2是否在s1s1上,可通过调用一次strstr函数得到结果。以空间换时间,时间复杂度为O(1)*/bool isContain2(char* src,char* des){ int len=strlen(src); char* src2=new char[2*len+1]; for(int i=0;i<2*len;i++) { src2[i]=src[i%len]; } src2[2*len]='\0'; if(strstr(src2,des)) { return true; } return false;}int main(){ char src[]="AABBCD"; char des[]="CDAA"; bool value=isContain2(src,des); if(value)cout<<"包含"<