题目链接:「UOI-R1」磁铁 - 洛谷
考察点:字符串
思路:将母串看成一个环,环中数字的顺序不能改变,查找环中是否含有子串。这里将母串等于母串加母串,从i到i+n(0<=i<n)就是成环后母串的所有可能。
参考:P8892 「UOI-R1」磁铁 题解 - yeshubo 的博客 - 洛谷博客
「UOI-R1」T2 题解 - happybob 的博客 - 洛谷博客
AC代码:
#include<iostream>
using namespace std;
int main()
{
int T;
cin>>T;
string s1,s2;
while(T--)
{
cin>>s1>>s2;
int n=s1.size();
int m=s2.size();
bool haveAns=false;
if(m>n)
{
cout<<"N"<<endl;
continue;
}
s1=s1+s1;
for(int i=0;i<n;++i)
{
int pos1=i,pos2=0;
while(pos1<n+i&&pos2<m)
{
if(s1[pos1]==s2[pos2])
{
pos1++;
pos2++;
}
else
{
pos1++;
}
}
if(pos2==m)
{
haveAns=true;
break;
}
}
if(haveAns) cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
return 0;
}