题目描述:
对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。
给定两个字符串s1和s2,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如CDAA是由AABCD两次移位后产生的新串BCDAA的子串,而ABCD与ACBD则不能通过多次移位来得到其中一个字符串是新串的子串。
输入格式:
一行,包含两个字符串,中间由单个空格隔开。每个字符串只包含字母和数字,长度不超过100。
输出格式:
如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true,否则输出false。
样例输入:
AABCD CDAA
样例输出:
true
时间限制: 1000ms
空间限制: 128MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[101],b[101],c[101],d;
cin>>a>>b;
int s=strlen(a),s1=strlen(b);
if(s<s1){
strcpy(c,a);
strcpy(a,b);
strcpy(b,c);
swap(s,s1);
}
for(int i=0;i<s-1;i++){
d=a[0];
for(int j=1;j<s;j++){
a[j-1]=a[j];
}
a[s-1]=d;
if(strstr(a,b)){
cout<<"true";
return 0;
}
}
cout<<"false";
return 0;
}