题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/A
题意:
判断字符串是否相等,有以下两种情况任意一种就想等
1)它们是完全相等的。
2)把字符串a分离为两个长度相等的字符串a1,a2,字符串b也同样分为两个长度相同的字符串b1,b2,以下两种情况任意一种就想等
(1)a1与b1相等,a2与b2相等。
(1)a1与b2相等,a2与b1相等。
输入的两个字符串长度一定是相等的。两个字符串相等,输出YES,否则,输出NO。
案例:
input
aaba
abaa
output
YES
思路分析:
当字符串的长度为奇数时,要判断整个字符串是否完全相等,当字符串长度为偶数时,就要把它分为长度相等的两部分,再一次判断是否为奇数。。。。。
刚开始定义的是string类,但是很难写下去,建议用char型,定义数组。
源代码如下:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define maxn 200000 5 using namespace std; 6 char a[maxn],b[maxn]; 7 int DO(char *a,char *b,int l) 8 { int t; 9 if(l%2!=0) //长度为奇数判断 10 { 11 t=0; 12 for(int i=0;i<l;i++) 13 if(a[i]!=b[i]) 14 t++; 15 if(!t) 16 return 1; 17 else 18 return 0; 19 } 20 21 else 22 { 23 if((DO(a,b,l/2)&&DO(a+l/2,b+l/2,l/2))||(DO(a,b+l/2,l/2)&&DO(a+l/2,b,l/2)))
//长度为偶数判断 24 return 1; 25 else 26 return 0; 27 } 28 } 29 int main() 30 { 31 int len; 32 scanf("%s%s",a,b); 33 len=strlen(a); 34 if(DO(a,b,len)) 35 cout<<"YES"<<endl; 36 else 37 cout<<"NO"<<endl; 38 return 0; 39 }