本题从《编程之美》上看到的。

1.字符串移位包含问题:给定两个字符串s1和s2,判定s2是否能被s1做循环移位得到字符串包含。


常规解法如下:

 
  
  1. char src[] = "AABBCDD"
  2. char des[] = "CDAA"
  3.  
  4. int len = strlen(src); 
  5. for(int i = 0;i < len;i++) 
  6.    char tempchar = src[0]; 
  7.    for(int j = 0;j < len-1;j++) 
  8.        { src[j] = src[j+1]; } 
  9.    src[len-1] = tempchar; 
  10.    if(strstr(str,des) == 0) 
  11.        { return (true); } 
  12. return (false); 
但是,如果先举例分析: ABCD-BCDA-CDAB-DABC-ABCD... 如果是在字符串ABCD后面直接加上呢: ABCD-ABCDA-ABCDAB-ABCDABC-ABCDABCD... 这样可以看出循环一次之后得到s1s1,那再利用strstr函数判断就是了。这样方便的是不用再做循环操作,直接copy一份s1,新建s1s1或者直接在s1后append一个s1就可以直接用strstr了。这个方法采用了提高空间复杂度来换取