class Solution {
public:
bool isScramble(string s1, string s2) {
if(s1.size()!=s2.size())
return false;
if(s1.size()==1)
{
if(s1[0]==s2[0])
return true;
}
string t1(s1);
string t2(s2);
sort(t1.begin(),t1.end());
sort(t2.begin(),t2.end());
if(t1.compare(t2)!=0)
return false;
int n=s1.size();
for(int i=1;i<n;i++)
{
string ls1=s1.substr(0,i);
string rs1=s1.substr(i,n-i);
string ls2=s2.substr(0,i);
string rs2=s2.substr(i,n-i);
if(isScramble(ls1,ls2)&&isScramble(rs1,rs2))
return true;
string rs3=s2.substr(n-i,i);
string ls3=s2.substr(0,n-i);
if(isScramble(ls1,rs3)&&isScramble(rs1,ls3))
return true;
}
return false;
}
};
public:
bool isScramble(string s1, string s2) {
if(s1.size()!=s2.size())
return false;
if(s1.size()==1)
{
if(s1[0]==s2[0])
return true;
}
string t1(s1);
string t2(s2);
sort(t1.begin(),t1.end());
sort(t2.begin(),t2.end());
if(t1.compare(t2)!=0)
return false;
int n=s1.size();
for(int i=1;i<n;i++)
{
string ls1=s1.substr(0,i);
string rs1=s1.substr(i,n-i);
string ls2=s2.substr(0,i);
string rs2=s2.substr(i,n-i);
if(isScramble(ls1,ls2)&&isScramble(rs1,rs2))
return true;
string rs3=s2.substr(n-i,i);
string ls3=s2.substr(0,n-i);
if(isScramble(ls1,rs3)&&isScramble(rs1,ls3))
return true;
}
return false;
}
};