本文共 1240 字,大约阅读时间需要 4 分钟。
1096: Is The Same? Time Limit: 1 Sec Memory Limit: 64 MB Submit: 30 Solved: 11 [Submit][Status][Web Board] Description 给出2个字符串S和T,如果可以通过循环移位使得S和T相等,则我们称S和T是同构字符串, 例如S=“abcd”, T=“bcda”,则S和T是同构字符串;而S=“abcd”和T=“bcad”则不是同构字符串。 循环移位是指:在⼀个长度为n的字符串S中,取⼀个任意下标i,把字符串分为两段,分别为 S1S2...Si 和Si+1Si+2...Sn,然后把字符串变为Si+1Si+2...SnS1S2...Si,例如S=“qwerty”,取i=3, 则变 为”rtyqwe”(注意,一个字符串本⾝身也算是它的同构字符串)。 Input 第⼀行包含一个整数T(1 <= T <= 20),代表测试组数。 对于每组数据,包含2个字符串,字符串长度都小于等于105且非空,输入保证字符串只包含小写字⺟。 Output 对于每组数据,如果这两个字符串是同构字符串,则输出Yes,否则输出No。 Sample Input 2 abcd bcda abcd bcad Sample Output Yes No HINT SourceAlex@NBUT
将原字符串m重复两次 在新的字符串中查找是否有n 就像一串珠子 与边上的珠子都相对确定
#include#include #include #include #include using namespace std;int main(){ string n,m,nn,mm; long long a,b,i,k; cin>>a; while(a--) { cin>>n>>m; k=5; if(n.size()!=m.size()) { k=0; } nn=n+n; mm=m+m; if((nn.find(m)!=string::npos||mm.find(n)!=string::npos)&&k) cout<<"Yes"< #include #include using namespace std;int nexta[1000100];void getnext(string n){ int i=0,j=-1; nexta[0]=-1; while(i >a; while(a--) { memset(nexta,0,sizeof(nexta)); k=5; cin>>n>>m; nn=n+n; if(n.size()!=m.size()) { k=0; } getnext(m); if(kmp(nn,m)&&k) { cout<<"Yes"<
转载地址:http://ttfci.baihongyu.com/