当前位置:首页 > JavaScript

js实现ismerge

2026-04-06 14:40:09JavaScript

JavaScript 实现 isMerge 函数

isMerge 函数通常用于判断一个字符串是否可以由另外两个字符串按顺序合并而成。例如,"abc" 可以拆分为 "a""bc" 合并而成,或者 "ab""c" 合并而成。

递归实现方法

递归方法通过逐步检查字符串的每个字符是否来自两个候选字符串之一:

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

动态规划实现方法

动态规划方法通过构建一个二维表格来记录匹配状态:

js实现ismerge

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

  const dp = Array(part1.length + 1)
    .fill()
    .map(() => 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("abc", "a", "bc")); // true
console.log(isMerge("abc", "ab", "c"));  // true
console.log(isMerge("abc", "ac", "b"));  // false

注意事项

  • 递归方法在字符串较长时可能会导致栈溢出,适合小规模数据。
  • 动态规划方法适用于大规模数据,但空间复杂度较高。
  • 两种方法的时间复杂度均为 O(n*m),其中 n 和 m 分别是两个候选字符串的长度。

标签: jsismerge
分享给朋友:

相关文章

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…