解题思路:
1.由题可知,一个字符串通过不断移动首位的字符到末尾的字符,判断是否包含另一个字符串,那么将定义一个新的字符串c=a+a,c即包含了字符串a进行上述操作的所有情况,同理,d=b+b;
2.第二步对于空串的判断,如果有一个是空串另一个不是,则必定包含,通过字符串的长度判断即可
3.第三步判断,a,b哪个字符串比较长,因为只有长的字符串才可能包含短的字符串,如果a的字符串比较长,那么就是在字符串c中寻找b,反之就是在字符串d中寻找a,寻找方法和上道题一致,利用首字母判断和打标记的方法来判断
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b;
cin>>a>>b;
string c=a+a;//定义字符串c=a+a,形成首尾相连的所有情况
string d=b+b;//同理
if((b.length()==0&&a.length()!=0)||(a.length()==0&&b.length()!=0))//特殊子串判断,如果为空串,则包含
{
cout<<"true";
return 0;
}
if(a.length()>=b.length())//如果字符串a大于字符串b的话才会有包含情况
for(int i=0;i<=c.length()-1;i++)
{
if(c[i]==b[0])//如果c字符串的字母和b的首字符相等
{
bool flag=1;//打标记
for(int j=1;j<=b.length()-1;j++)//判断其余字符是否相等
{
if(c[i+j]==b[j])
continue;
else//如果有一个字符不相等
{
flag=0;
break;
}
}
if(flag==1)//如果其余字符都相等
{
cout<<"true";
return 0;
}
}
}
else //如果字符串b比较长
for(int i=0;i<=d.length()-1;i++)
{
if(d[i]==a[0])
{
bool flag=1;
for(int j=1;j<=a.length()-1;j++)
{
if(d[i+j]==a[j])
continue;
else
{
flag=0;
break;
}
}
if(flag==1)
{
cout<<"true";
return 0;
}
}
}
cout<<"false";
return 0;
}