当前位置:首页 > 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实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…