转自:http://www.cnblogs.com/yuzhangcmu/p/4189152.html
class Solution {
public:
bool isScramble(string s1, string s2) {
if(s1.length() != s2.length())
return false;
vector<vector<vector<bool> > > dp(s1.length(), vector<vector<bool> >(s1.length(), vector<bool>(s1.length())));
for(int i = 0; i < s1.length(); i++) {
for(int j = 0; j < s2.length(); j++) {
dp[i][j][0] = (s1[i] == s2[j]);
}
}
for(int k = 1; k < s1.length(); k++) {
for(int i = 0; i < s1.length(); i++) {
for(int j = 0; j < s2.length(); j++) {
dp[i][j][k] = false;
if(i + k < s1.length() && j + k < s2.length()) {
for(int h = 0; h < k; h++) {
dp[i][j][k] = (dp[i][j][h] && dp[i + h + 1][j + h + 1][k - h - 1]) || (dp[i][j + k - h][h] && dp[i + h + 1][j][k - h - 1]);
if(dp[i][j][k])
break;
}
}
}
}
}
return dp[0][0][s1.length() - 1];
}
};