当前位置:首页 > JavaScript

js实现ismerge

2026-03-14 20:57:11JavaScript

实现 isMerge 函数

isMerge 函数通常用于判断一个字符串是否可以由另外两个字符串按顺序合并而成。例如,"codewars" 可以由 "cdw""oears" 合并而成,因为 "c" + "o" + "d" + "w" + "e" + "a" + "r" + "s" 可以组成 "codewars"

js实现ismerge

递归方法实现

递归方法通过逐个字符匹配来判断是否可以合并。每次递归调用时,检查当前字符是否与 part1part2 的第一个字符匹配,如果匹配则继续递归。

js实现ismerge

function isMerge(s, part1, part2) {
  if (s.length !== part1.length + part2.length) {
    return false;
  }

  if (!s.length) {
    return true;
  }

  if (part1.length && s[0] === part1[0] && isMerge(s.slice(1), part1.slice(1), part2)) {
    return true;
  }

  if (part2.length && s[0] === part2[0] && isMerge(s.slice(1), part1, part2.slice(1))) {
    return true;
  }

  return false;
}

动态规划方法实现

动态规划方法通过构建一个二维数组来记录匹配状态,避免重复计算。dp[i][j] 表示 s 的前 i + j 个字符是否可以通过 part1 的前 i 个字符和 part2 的前 j 个字符合并而成。

function isMerge(s, part1, part2) {
  if (s.length !== part1.length + part2.length) {
    return false;
  }

  const dp = Array.from({ length: part1.length + 1 }, () => 
    Array(part2.length + 1).fill(false)
  );

  dp[0][0] = true;

  for (let i = 0; i <= part1.length; i++) {
    for (let j = 0; j <= part2.length; j++) {
      if (i === 0 && j === 0) {
        continue;
      }

      if (i > 0 && dp[i - 1][j] && s[i + j - 1] === part1[i - 1]) {
        dp[i][j] = true;
      }

      if (j > 0 && dp[i][j - 1] && s[i + j - 1] === part2[j - 1]) {
        dp[i][j] = true;
      }
    }
  }

  return dp[part1.length][part2.length];
}

使用示例

console.log(isMerge("codewars", "cdw", "oears")); // true
console.log(isMerge("codewars", "cdew", "oars")); // true
console.log(isMerge("codewars", "code", "wars")); // true
console.log(isMerge("codewars", "code", "warss")); // false

注意事项

  • 递归方法在字符串较长时可能导致性能问题,因为存在大量重复计算。
  • 动态规划方法虽然更高效,但空间复杂度较高,适用于中等长度的字符串。
  • 确保输入的 part1part2 的长度之和与 s 的长度一致,否则直接返回 false

标签: jsismerge
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…