题目
给定两个字符串 s1 和 s2, 要求判定 s2 是否能够被通过 s1 作循环移位 ( rotate )
得到的字符串包含. 例如, 给定 s1 = AABCD 和 s2 = CDAA, 返回 true; 给定
s1 = ABCD 和 s2 = ACBD, 返回 false.
在编程之美上,讲解了2中方法,这里不再赘述。主要是考虑:不申请过多新的空间,来解决该问题。
参考代码如下:
-
//字符串移位包含问题
-
-
-
#include<iostream>
-
#include<assert.h>
-
using namespace std;
-
-
bool check(const char* str1,const char *str2)
-
{
-
assert((str1!=NULL) && (str2!=NULL));
-
int len1=strlen(str1);
-
int len2=strlen(str2);
-
if(len1<len2)
-
return false;
-
for(int i=0;i<len1;i++)
-
{
-
int j=i;
-
int k=0;
-
while(str1[j]==str2[k])
-
{
-
j=(j+1)%len1;
-
++k;
-
}
-
if(k==len2)
-
return true;
-
}
-
return false;
-
}
-
int main()
-
{
-
const char*s1="abcde";
-
const char *s2="deab";
-
bool result=check(s1,s2);
-
cout<<result<<endl;
-
return 0;
-
- }