题目描述:
给定两个字符串s1和s2,要求上是否能够通过s1作循环移位(rotate)得到的字符串包含。例如s1=AABCD和s2=CDAA,返回true,给定s1=ABCD和s2=ACBD,返回false.
解法一:
可以使用最直接的方法对s1进行循环移位,再进行字符串包含的判断,从而遍历其所有的可能性。
代码如下:
char src[5] = "AABCD";
char des[5] = "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(src, des) == 0)
return (true);
}
return false;
穷举做循环移位,当字符串长度N较大时,显然效率很低。
解法二:
总结:
第二种方法利用了“提高空间复杂度换取时间复杂度的降低”的思路,适用于对时间复杂度要求高的场合。
原文地址:http://blog.csdn.net/wangfengfan1/article/details/45316915