Description
给定两个字符串S1和S2,要求判定S2是否能够被S1做循环移位得到的字符串包含。
说明:字符串S1和S2中不包含空格,每个字符串至少包含一个字符。
例如:给定S1=AABCD,S2=CDAA,则返回True;给定S1=ABCD,S2=ACBD,则返回False。
Input
第一行为整数N(0<N<1,000,000,000)
第二到N+1行是N组输入数据,每行包括两个字符串,字符串S1和字符串S2,其中字符串的长度不超过100。
Output
针对每个例子,如果S2能够被S1做循环移位得到的字符串包含,输出True,否则输出False。
每个输出结果为独立的一行。
Sample Input
2
AABCD CDAA
ABCD ACBD
Sample Output
True
False
如果是直接想交差的话,那么直接用c++可以秒杀这道题目
(string1+string1).find(string)
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
bool cmp(string & a, string &b) {
string temp = a+a;
if(temp.find(b) != string::npos)
return true;
return false;
}
int main() {
string s1;
string s2;
int N;
cin >> N;
while(N--) {
cin >> s1 >> s2;
cout << (cmp(s1, s2) ? "True" : "False") << endl;
}
return 0;
}
(未完待续)
来源:中山大学数据结构与算法课