Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2793222
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: C/C++

2012-08-28 09:19:04

假设字符串s1=AABCD,s2=CDAA,判断s2是否可以通过S1的循环移位得到字符串包含。
 如 s1移两位: 1.ABCDA->2.BCDAA 则此时包含了 S2="CDAA"


 解题思路:
 分解s1的循环移位得到:
 AABCD,ABCDA,BCDAA,CDAAB,.....
 如果我们将前面移走的字符串保留下来,则有:
 AABCD,AABCDA,AABCDAA,AABCDAAB,AABCDAABC,AABCDAABCD

这里,我们可以发现,实际对s1的循环移位得到的字符串实际为s1s1。
那么我们判断s2是否可以通过s1循环移位得到包含,则只需要判断s1s1中是否含有s2即可以。
用提高空间复杂度来换取时间复杂度的减低的目的。

strstr函数原型为: 
extern char *strstr(char *str1, char *str2);
其参数是传统的char   *型字符串,string型数据类型是不能作为其参数的。但可以通过string成员函数string::c_str()转换成char*类型。象这样调用: 
strstr(str1.c_str(),   str2.c_str())   


点击(此处)折叠或打开


  1. #include
  2. #include
  3. using namespace std;

  4. /*函数原型是char *strstr(char *str1,char *str2);
  5. **作用是找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)
  6. ** 如果找到返回该位置的指针。若找不到,返回NULL指针。
  7. */
  8. char * mystrstr(char * str1,char * str2)
  9. {
  10. char * p1=str1;
  11. char * p2=str2;
  12. while(*str1!='\0' && *p2!='\0')
  13. {
  14. if(*str1==*p2)
  15. {
  16. str1++;
  17. p2++;
  18. }
  19. else
  20. {
  21. str1++;
  22. p1=str1;//如果不相等,重置p1,p2
  23. p2=str2;
  24. }
  25. }
  26. if(*p2=='\0')
  27. return p1;
  28. else
  29. return NULL;
  30. }


  31. //s2是否可以通过s1循环移位得到包含,则只需要判断s1s1中是否含有s2即可以。
  32. int rotstr(string src,string des)
  33. {
  34. string temp=src+src;
  35. if(strstr(temp.c_str(),des.c_str())==NULL)
  36. {
  37. return 0;
  38. }
  39. else
  40. {
  41. return 1;
  42. }
  43. }

  44. int main()
  45. {
  46. char * src="AABBCD";
  47. char * des="DAAB";
  48. int flag=rotstr(src,des);
  49. printf("1 include and 0 not include: %d\n",flag);

  50. char * str1="abcdef";
  51. char * str2="def";
  52. char * str=mystrstr(str1,str2);
  53. if(str!=NULL)
  54. {
  55. printf("exist %s\n",str);
  56. }
  57. return 0;
  58. }

  59. /*
  60. 1 include and 0 not include: 1
  61. exist def
  62. Press any key to continue
  63. */



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