您的位置:首页 > 产品设计 > UI/UE

D. Equivalent Strings

2015-07-23 21:19 435 查看
                    D. Equivalent Strings

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <sstream>
using namespace std;
typedef __int64 LL;
const int INF = 0x4ffffff;
const double EXP = 1E-5;
const LL mod = 1e9+7;
const int MS= 200005;

bool equals(string s1,string s2)
{
int len1 = s1.size();
int len2 = s2.size();
if(s1 == s2)
return true;
else if(len1 != len2 || (len1&1) ==1 || (len2 &1) ==1)
return false;
else
{
//     if(equals(s1.substr(0,len1/2),s2.substr(0,len1/2)) && equals(s1.substr(len1/2,len1/2),s2.substr(len1/2,len1/2)))
//          return true;       //  不把这个放后面会超时,因为前面的s1 == s2没有通过。说明相同位置上有字符不同。先交叉比较能够优化。

if(equals(s1.substr(0,len1/2),s2.substr(len1/2,len1/2)) && equals(s1.substr(len1/2,len1/2),s2.substr(0,len1/2)))
return true;
if(equals(s1.substr(0,len1/2),s2.substr(0,len1/2)) && equals(s1.substr(len1/2,len1/2),s2.substr(len1/2,len1/2)))
return true;

return false;
}
}

int main()
{
string s1,s2;
cin>>s1>>s2;
if(equals(s1,s2))
printf("YES\n");
else
printf("NO\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: