字符串移位包含问题
字符串移位包含问题
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
string a,b;
cin>>a>>b;
//谁长遍历谁
if(a.size()<b.size()) swap(a,b);
//1-对整个字符串进行移位
for(int i=0; i<a.size(); i++){
//每次循环都将第一个字符串移动到末尾形成新的字符串
a=a.substr(1)+a[0];
//2-遍历每个子串
//j+b.size()意为在 a 中从位置 j 开始取出 b.size() 个字符时
for(int j=0; j+b.size()<=a.size(); j++){
int k=0;
//3-遍历子串中的每个字符
for(; k<b.size(); k++){
//j+k意为从 a 的第 j 个位置开始,逐个字符和 b 对应位置的字符比较
if(a[j+k]!=b[k])
break;
}
//只有当整个 b 被成功匹配完,k 才会从 0 增加到 b.size()
//如果中途有字符不匹配,break 会提前跳出循环,k 就不会等于 b.size()
if(k==b.size()){
cout<<"true";
return 0;
}
}
}
cout<<"false";
return 0;
}
2-第二层循环的举例
3-第三层循环的举例