97. 交错字符串

108 阅读1分钟

97. 交错字符串

和下面这道题雷同

剑指 Offer II 096. 字符串交织 - 掘金 (juejin.cn)

给定三个字符串 s1s2s3,请判断 s3 能不能由 s1 和 s2 **交织(交错)  组成。

image.png

var isInterleave = function (s1, s2, s3) {
  var l1 = s1.length,
    l2 = s2.length,
    l3 = s3.length;
  if (l1 + l2 !== l3) return false;
  if (l1 === 0) return s2 === s3;
  if (l2 === 0) return s1 === s3;
  var dp = new Array(l3 + 1).fill(false);
  dp[0] = true;
  for (var i = 0; i <= l1; i++) {
    for (var j = 0; j <= l2; j++) {
      var p = i + j;
      if (i > 0) {
        dp[j] = dp[j] && s3[p - 1] === s1[i - 1];
      }
      if (j > 0) {
        var flag1 = dp[j]
        var flag2 = dp[j - 1]
        var flag3 = s3[p - 1] === s2[j - 1]
        dp[j] = flag1 || flag2 && flag3;
      }
    }
  }
  return dp[l2];
};

代码调试

var s1 = "aabcc",
  s2 = "dbbca",
  s3 = "aadbbcbcac";
console.log(isInterleave(s1, s2, s3));