Equivalent Strings


Description

Today on a lecture about strings Gerald learned a new definition of string equivalency. Two stringsaandbof equal length are calledequivalentin one of the two cases:

  1. They are equal.
  2. If we split stringainto two halves of the same sizea1anda2, and stringbinto two halves of the same sizeb1andb2, then one of the following is correct:
    1. a1is equivalent tob1, anda2is equivalent tob2
    2. a1is equivalent tob2, anda2is equivalent tob1

As a home task, the teacher gave two strings to his students and asked to determine if they are equivalent.

Gerald has already completed this home task. Now it's your turn!

Input

The first two lines of the input contain two strings given by the teacher. Each of them has the length from1to200 000and consists of lowercase English letters. The strings have the same length.

Output

Print "YES" (without the quotes), if these two strings are equivalent, and "NO" (without the quotes) otherwise.

Sample Input

Input
aaba
abaa
Output
YES
Input
aabb
abab
Output
NO

Hint

In the first sample you should split the first string into strings "aa" and "ba", the second one — into strings "ab" and "aa". "aa" is equivalent to "aa"; "ab" is equivalent to "ba" as "ab" = "a" + "b", "ba" = "b" + "a".

In the second sample the first string can be splitted into strings "aa" and "bb", that are equivalent only to themselves. That's why string "aabb" is equivalent only to itself and to string "bbaa".

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef unsigned long long LL;
 4 const int maxn=200010;
 5 const int B=123;
 6 char a[maxn],b[maxn];
 7 int cmp(int len,char x[],char y[])
 8 {
 9     for(int i=0;i<len;i++)
10         if(x[i]<y[i])return -1;
11         else if(x[i]>y[i])return 1;
12     return 0;
13 }
14 void get(int len,char *s)
15 {
16     if(len&1)return ;
17     len/=2;
18     get(len,s);
19     get(len,s+len);
20     if(cmp(len,s,s+len)>0)
21     {
22         for(int i=0;i<len;i++)
23             swap(s[i],s[i+len]);
24     }
25 }
26 int main()
27 {
28     while(scanf("%s%s",a,b)!=EOF)
29     {
30         get(strlen(a),a);
31         get(strlen(b),b);
32         if(strcmp(a,b)==0)printf("YES\n");
33         else printf("NO\n");
34     }
35     return 0;
36 }
View Code

一开始我也是在傻傻的暴力,然而并没有什么软用。。

仔细想想就知道会超时。。

其实我们只要按他的string比较规则把字符串 一层层比较然后排序,

在最后return string a==string b 就行了

这样是不是剪短了简答树的很多子叶呢??

优质内容筛选与推荐>>
1、ASP.NET 2.0页面框架的几点新功能
2、IBM Intel 微软
3、Memcache 优化建议
4、嵌入式常用英文缩写及单词整理
5、(转)从0移植uboot(三) _编译最小可用uboot


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn