本题从《编程之美》上看到的。
1.字符串移位包含问题:给定两个字符串s1和s2,判定s2是否能被s1做循环移位得到字符串包含。
常规解法如下:
但是,如果先举例分析: ABCD-BCDA-CDAB-DABC-ABCD... 如果是在字符串ABCD后面直接加上呢: ABCD-ABCDA-ABCDAB-ABCDABC-ABCDABCD... 这样可以看出循环一次之后得到s1s1,那再利用strstr函数判断就是了。这样方便的是不用再做循环操作,直接copy一份s1,新建s1s1或者直接在s1后append一个s1就可以直接用strstr了。这个方法采用了提高空间复杂度来换取
- char src[] = "AABBCDD";
- char des[] = "CDAA";
- int len = strlen(src);
- for(int i = 0;i < len;i++)
- {
- char tempchar = src[0];
- for(int j = 0;j < len-1;j++)
- { src[j] = src[j+1]; }
- src[len-1] = tempchar;
- if(strstr(str,des) == 0)
- { return (true); }
- }
- return (false);