题目
判断一个子串是否是另一子串通过循环移位后的新子串的子串。
解
需要一些c++字符串自带的函数。
代码
代码1(直接将长的字符串弄成环,判断另一个字符串是否出现)
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
string s1, s2, s3;
int main(){
cin >> s1 >> s2;
if(s1.size() < s2.size()){
//使长度长的在前
s3 = s1;
s1 = s2;
s2 = s3;
}
s1 = s1 + s1; //模拟成环
if(s1.find(s2,0) != string::npos)
printf("true");
else
printf("false");
}
代码2(模拟移位)
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
string s1, s2, s3;
int main(){
cin >> s1 >> s2;
if(s1.size() < s2.size()){
//使长度长的在前
s3 = s1;
s1 = s2;
s2 = s3;
}
for(int i = 0; i < s1.size(); ++i){
if(s1.find(s2,0) != string::npos){
//寻找
printf("true");
return 0;
}
s1 = s1 + s1[0]; //模拟移位
s1.erase(0,1);
}
printf("false");
}