Equivalent Strings

题目链接: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 }
原文地址:https://www.cnblogs.com/q-c-y/p/4683197.html