编程之美之字符串移位包含问题

1000阅读 0评论2014-04-23 double_lq
分类:C/C++

题目

给定两个字符串 s1 和 s2, 要求判定 s2 是否能够被通过 s1 作循环移位 ( rotate )

得到的字符串包含. 例如, 给定 s1 = AABCD 和 s2 = CDAA, 返回 true; 给定

s1 = ABCD 和 s2 = ACBD, 返回 false.
在编程之美上,讲解了2中方法,这里不再赘述。主要是考虑:不申请过多新的空间,来解决该问题。
参考代码如下:
 

  1. //字符串移位包含问题


  2. #include<iostream>
  3. #include<assert.h>
  4. using namespace std;

  5. bool check(const char* str1,const char *str2)
  6. {
  7.     assert((str1!=NULL) && (str2!=NULL));
  8.     int len1=strlen(str1);
  9.     int len2=strlen(str2);
  10.     if(len1<len2)
  11.         return false;
  12.     for(int i=0;i<len1;i++)
  13.     {
  14.      int j=i;
  15.         int k=0;
  16.         while(str1[j]==str2[k])
  17.         {
  18.          j=(j+1)%len1;
  19.             ++k;
  20.         }
  21.         if(k==len2)
  22.             return true;
  23.     }
  24.     return false;
  25. }
  26. int main()
  27. {
  28.     const char*s1="abcde";
  29.     const char *s2="deab";
  30.     bool result=check(s1,s2);
  31.     cout<<result<<endl;
  32.     return 0;

  33. }
主要是参考了博客:http://kenby.iteye.com/blog/1451910


上一篇:c++对数组的引用
下一篇:Boost库的编译及在vs2010下的环境配置