87. 扰乱字符串

101 阅读1分钟

87. 扰乱字符串

定义状态:

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];
};