问题出自《编程之美》3.1
1 /* 2013.6.25 2 * 问题:给定两个字符串s1和s2,要求判定给定字符串s2是否 3 * 能够通过字符串s1循环移位得到的字符串包含。 4 * 例如: 5 * 1. s1 = AABCD,s2 = CDAA,则返回true; 6 * 2. s1 = ABCD,s2 = ACBD,则返回false 7 */ 8 #include <stdio.h> 9 #include <string.h> 10 #include <stdlib.h> 11 12 enum { true = 1, false = 0 }; 13 14 /* 2013.6.25 15 * 方式1:用s2[0]将字符串s1分为两个部分。 16 * 第一部分:strcmp(s2, s1 + j, strlen(s1)-j) ,其中,j是s2[0] == s1[j] 17 * 第二部分:strcmp(s2 + strlen(s1) - j, s1, strlen(s2) - strlen(s1) - j). 18 * 时间复杂度:O( strlen(s1) * strlen(s2) ), 空间复杂度:O(1) 19 */ 20 int CheckRotStr1( const char *s1, const char *s2 ) 21 { 22 int start = 0; 23 int nlen1, nlen2, tmpLen; 24 25 if ( s1 == NULL || s1[0] == '