Description
A国认为如果字符串a可以通过操作X变成字符串b,就认为是一样的字符串。
操作X:将字符串分为两部分,然后调换位置,操作次数不限。W=xy,W’=yx。
Input
有多组测试数据,处理到文件结尾。每组测试数据包含两个个字符串(包含英文字符和数字,长度为[1,500000])。
Output
对于每组测试数据,如果两个字符串是相同的,输出Yes或者是No。
Sample Input
YesOrNo
NoOrYes
YesOrNo
rNoYesO
Sample Output
No
A国认为如果字符串a可以通过操作X变成字符串b,就认为是一样的字符串。
操作X:将字符串分为两部分,然后调换位置,操作次数不限。W=xy,W’=yx。
Input
有多组测试数据,处理到文件结尾。每组测试数据包含两个个字符串(包含英文字符和数字,长度为[1,500000])。
Output
对于每组测试数据,如果两个字符串是相同的,输出Yes或者是No。
Sample Input
YesOrNo
NoOrYes
YesOrNo
rNoYesO
Sample Output
No
Yes
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
using namespace std;
char a[500005];
char b[500005];
char c[500005];
int main()
{
int i;
int alen,blen;
int flag;
while(scanf("%s%s",a,b)!=EOF)
{
getchar();
alen=strlen(a);
blen=strlen(b);
if(alen!=blen)
{
printf("No\n");
continue;
}
flag=0;
for(i=0; i<alen; i++)
{
if(b[0]==a[i])
{
strncpy(c,a+i,alen-i);
strncpy(c+alen-i,a,i);
c[alen]='\0';
if(strcmp(b,c)==0)
{
flag=1;
break;
}
}
}
if(flag==1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
法2:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
int main()
{
string s1,s2;
while(cin>>s1)
{
cin>>s2;
if(s1.size()!=s2.size())
{
cout<<"No"<<endl;
continue;
}
else if(s1==s2)
{
cout<<"Yes"<<endl;
continue;
}
int len=s1.size();
int flag=0;
if(s1.size()==2)
{
if(s1[0]=s2[1]&&s1[1]==s2[0])
{
printf("Yes\n");
continue;
}
}
string s3,s4,s5;
for(int i=0;i<len;i++)
{
if(s2[0]==s1[i])
{
s3.assign(s1,0,i);
//cout<<s3<<endl;
s4.assign(s1,i,len-i+1);
//cout<<s4<<endl;
s5=s4+s3;
//cout<<s5<<endl;
if(s5==s2)
{
flag=1;
break;
}
}
}
if(flag==1)
printf("Yes\n");
else if(flag==0)
printf("No\n");
}
return 0;
}