题目地址:点击打开链接
class Solution {
public:
bool isScramble(string s1, string s2) {
int N=s1.size();
if(s2.size()!=N)return false;
vector<vector<vector<bool>>> f(N+1,vector<vector<bool>>(N,vector<bool>(N,false)));
for(int i=0;i<N;++i){
for(int j=0;j<N;++j){
f[1][i][j]=(s1[i]==s2[j]);
}
}
for(int n=1;n<=N;++n){
for(int i=0;i<N-n+1;++i) {
for(int j=0;j<N-n+1;++j){
for(int k=1;k<=n-1;++k){
if((f[k][i][j]&&f[n-k][i+k][j+k])||(f[k][i][j+n-k]&&f[n-k][i+k][j])){
f[n][i][j]=true;
break;
}
}
}
}
}
return f[N][0][0];
}
};