Chinaunix首页 | 论坛 | 博客
  • 博客访问: 541096
  • 博文数量: 129
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1888
  • 用 户 组: 普通用户
  • 注册时间: 2013-06-20 11:09
文章分类

全部博文(129)

文章存档

2016年(1)

2015年(5)

2014年(64)

2013年(59)

我的朋友

分类: C/C++

2014-04-23 16:34:13

题目

给定两个字符串 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


阅读(999) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~