Description
定义两个字符串“相等”有以下两种情况:
1.两字符串完全相同
2.将a,b串分别均分成两个子串a1,a2,b1,b2,则当a1与b1“相等”且a2与b2“相等”或者当a1与b2“相等”且a2与b1“相等”时,a和b“相等”
现给出两字符串,判断其是否“相等”
Input
两个字符串
Output
若两串“相等”则输出YES,否则输出NO
Sample Input
aaba
abaa
Sample Output
YES
Solution
递归处理,注意当字符串长度为奇数时就不用递归直接比较两串字典序即可
Code
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define maxn 222222
char a[maxn],b[maxn];
bool cmp(int s1,int e1,int s2,int e2)
{
bool flag=true;
for(int i=s1,j=s2;i<=e1;i++,j++)
if(a[i]!=b[j])
return false;
return true;
}
bool solve(int s1,int e1,int s2,int e2)
{
if((e1-s1+1)%2)
return cmp(s1,e1,s2,e2);
int mid1=(s1+e1)>>1,mid2=(s2+e2)>>1;
return solve(s1,mid1,s2,mid2)&&solve(mid1+1,e1,mid2+1,e2)||solve(s1,mid1,mid2+1,e2)&&solve(mid1+1,e1,s2,mid2);
}
int main()
{
scanf("%s%s",a,b);
int len1=strlen(a),len2=strlen(b);
int flag;
if(len1!=len2)
flag=0;
else
flag=solve(0,len1-1,0,len1-1);
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return 0;
}