DP, Time O(n^4), Space O(n^3)。
参考:http://blog.csdn.net/pickless/article/details/11501443
class Solution {
public:
bool isScramble(string s1, string s2) {
const int n = s1.size();
if(n != s2.size()) return false;
bool f[n][n][n+1];
fill_n(&f[0][0][0], n*n*(n+1), false);
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
f[i][j][1] = (s1[i] == s2[j]);
for(int len=1; len<=n; len++)
{
for(int i=0; i+len<=n; i++)
{
for(int j=0; j+len<=n; j++)
{
for(int k=1; k<len; k++)
{
if(f[i][j][k] && f[i+k][j+k][len-k])
{
f[i][j][len] = true;
break;
}
if(f[i][j+len-k][k] && f[i+k][j][len-k])
{
f[i][j][len] = true;
break;
}
}
}
}
}
return f[0][0][n];
}
};
其他解法参考 leetcode题解。