定义状态:
dp[i][j][k] 表示 s1 从下标 i 开始,长度为 k 的子串 => s2 从下标 j 开始,长度为 k 的子串它的布尔型一致
也就是s1.slice(i , i + k) => s1.slice(i , i + k) 是否能成立。
var isScramble = function (s1, s2) {
if (s1.length !== s2.length) return false;
var len = s1.length;
var dp = new Array(len)
.fill(false)
.map(() =>
new Array(len).fill(false).map(() => new Array(len + 1).fill(false))
);
for (var i = 0; i < len; i++) {
for (var j = 0; j < len; j++) {
dp[i][j][0] = true;
if (s1[i] === s2[j]) {
dp[i][j][1] = true;
}
}
}
for (var k = 2; k <= len; k++) {
for (var i = 0; i <= len - k; i++) {
for (var j = 0; j <= len - k; j++) {
for (var v = 1; v < k; v++) {
dp[i][j][k] =
(dp[i][j][v] && dp[i + v][j + v][k - v]) ||
(dp[i][j + k - v][v] && dp[i + v][j][k - v]) ||
dp[i][j][k];
}
}
}
}
return dp[0][0][len];
};