1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Solution { public: bool isScramble(string s1, string s2) { int n = s1.size(); if (s1 == s2) return true; if (s1.size() != s2.size()) return false; vector<vector<vector<int>>> f(n, vector<vector<int>>(n, vector<int>(n + 1, false)));
for (int i = 0; i < n; i ++) for (int j = 0; j < n; j ++) if (s1[i] == s2[j]) f[i][j][1] = true;
for (int len = 2; len <= n; len ++) for (int i = 0; i <= n - len; i ++) for (int j = 0; j <= n - len; j ++) for (int k = 1; k < len; k ++) { bool a = f[i][j][k] && f[i + k][j + k][len - k]; bool b = f[i][j + len - k][k] && f[i + k][j][len - k]; if (a || b) { f[i][j][len] = true; } } return f[0][0][n]; } };
|