AcWing 776. 字符串移位包含问题
原题链接
困难
作者:
由比滨结衣
,
2021-02-21 11:41:47
,
所有人可见
,
阅读 236
话不多说直接上代码吧
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
bool flag = false;
string a, b;
cin >> a >> b;
if(a.size() < b.size()) swap(a, b);//保证b为子串
//先从a开始找到与b的第一个字符相同的下标
for(int i = 0; i < a.size(); i++){
int k = 0;
for(int j = 0, u = i; j < b.size(); j++, u++){ //记录a的下标为u,b的下标为j,此时为0
if(u == a.size()) u = 0; //之后u++,j++
if(a[u] != b[j]) break; //如果下标对应的字符不相等,则直接跳出循环
k++; //重新开始从a中找与b的第一个字符相同的下标
} //需要注意的点是u可能会越界,记得将其重置
if(k == b.size()){
flag = true;
break;
}
}
if(flag) puts("true");
else puts("false");
return 0;
}
另类写法……
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string a, b;
cin >> a >> b;
if(a.size() < b.size()) swap(a, b);
a += a;
if(a.find(b) != string :: npos) puts("true");
else puts("false");
return 0;
}