描述
问题:给定字符串s和t,判断是否字符串t能通过将s移位后的字符串所包含。
方法一
最简单的方法就是将s进行循环移位,再判断移位后的字符串是否包含字符串t,代码如下:
-
bool srcContaindst1(char src[],char des[])
-
{
-
if(*src==NULL||*des==NULL||strlen(src)==0||strlen(des)==0||strlen(src)
-
return false;
-
int srclen=strlen(src);
-
for(int i=0;i
-
{
-
char firstChar=src[0];
-
for(int j=0;j
-
{
-
src[j]=src[j+1];
-
}
-
src[srclen-1]=firstChar;
-
if(strstr(src,des)!=NULL)
-
{
-
return true;
-
}
-
}
-
return false;
-
}
2.方法二
利用空间换时间,将两个字符串s拼接成一个,即ss,对s循环移位后的字符串都是ss的子串。若字符串t能通过对s循环移位得到,那么字符串t也是ss的子串。代码如下:
-
bool srcContaindst2(char src[],char des[])
-
{
-
if(*src==NULL||*des==NULL||strlen(src)==0||strlen(des)==0||strlen(src)
-
return false;
-
int len=strlen(src);
-
char *newSrc=new char[len*2+1];
-
for(int i=0;i
-
{
-
if(i
-
newSrc[i]=src[i];
-
else
-
newSrc[i]=src[i-len];
-
}
-
newSrc[len*2]='\0';
-
if(strstr(newSrc,des)!=NULL)
-
{
-
return true;
-
}
-
return false;
-
}
3.方法三:
有没有一种方法:不需要申请过多新空间,而同样解决这一问题?采用src字符串指针循环的方法访问的方法
-
bool srcContaindst3(char *src,char *des)
-
{
-
if(*src==NULL||*des==NULL||strlen(src)==0||strlen(des)==0||strlen(src)
-
return false;
-
char *head=src;
-
char *c_s=src,*c_d=des;
-
while(*src!='\0'){
-
if(*src==*des){
-
c_s=src;
-
c_d=des;
-
while(*c_s==*c_d){
-
c_s++;
-
c_d++;
-
if(*c_s=='\0')
-
c_s=head;
-
if(*c_d=='\0'){
-
return true;
-
}
-
}
-
}
-
src++;
-
}
-
return false;
-
}
打开APP阅读更多精彩内容