字符串移位包含的问题解决方案

3G技术应用

1人已加入

描述

问题:给定字符串s和t,判断是否字符串t能通过将s移位后的字符串所包含。

方法一

最简单的方法就是将s进行循环移位,再判断移位后的字符串是否包含字符串t,代码如下:

  1. bool srcContaindst1(char src[],char des[])  
  2. {  
  3.     if(*src==NULL||*des==NULL||strlen(src)==0||strlen(des)==0||strlen(src)
  4.         return false;  
  5.     int srclen=strlen(src);  
  6.     for(int i=0;i
  7.     {  
  8.         char firstChar=src[0];  
  9.         for(int j=0;j
  10.         {  
  11.             src[j]=src[j+1];  
  12.         }  
  13.         src[srclen-1]=firstChar;  
  14.         if(strstr(src,des)!=NULL)  
  15.         {  
  16.             return true;  
  17.         }  
  18.     }  
  19.     return false;  
  20. }  

2.方法二

利用空间换时间,将两个字符串s拼接成一个,即ss,对s循环移位后的字符串都是ss的子串。若字符串t能通过对s循环移位得到,那么字符串t也是ss的子串。代码如下:

  1. bool srcContaindst2(char src[],char des[])  
  2. {  
  3.     if(*src==NULL||*des==NULL||strlen(src)==0||strlen(des)==0||strlen(src)
  4.         return false;  
  5.     int len=strlen(src);  
  6.     char *newSrc=new char[len*2+1];  
  7.     for(int i=0;i
  8.     {  
  9.         if(i
  10.             newSrc[i]=src[i];  
  11.         else  
  12.             newSrc[i]=src[i-len];  
  13.     }  
  14.     newSrc[len*2]='\0';  
  15.     if(strstr(newSrc,des)!=NULL)  

  16.     {  
  17.         return true;  
  18.     }  
  19.     return false;  
  20. }  

3.方法三

有没有一种方法:不需要申请过多新空间,而同样解决这一问题?采用src字符串指针循环的方法访问的方法

  1. bool srcContaindst3(char *src,char *des)  
  2. {  
  3.     if(*src==NULL||*des==NULL||strlen(src)==0||strlen(des)==0||strlen(src)
  4.         return false;  
  5.     char *head=src;  
  6.     char *c_s=src,*c_d=des;  
  7.     while(*src!='\0'){  
  8.         if(*src==*des){  
  9.             c_s=src;  
  10.             c_d=des;          
  11.             while(*c_s==*c_d){  
  12.                 c_s++;  
  13.                 c_d++;  
  14.                 if(*c_s=='\0')  
  15.                     c_s=head;  
  16.                 if(*c_d=='\0'){  
  17.                     return true;  
  18.                 }  
  19.             }  
  20.         }  
  21.         src++;  
  22.     }      
  23.     return false;  
  24. }  

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分