当前位置:首页 > JavaScript

力扣131 js实现

2026-03-01 16:01:27JavaScript

力扣131题(分割回文串)的JavaScript实现

题目描述
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回所有可能的分割方案。

示例
输入:"aab"
输出:

力扣131 js实现

[
  ["a","a","b"],
  ["aa","b"]
]

解题思路

回溯法结合动态规划预处理回文串。

  1. 动态规划预处理:生成一个二维数组 dpdp[i][j] 表示 s[i...j] 是否为回文串。
  2. 回溯搜索:从字符串起始位置开始,利用预处理结果快速判断可分割点,递归生成所有合法分割方案。

JavaScript代码实现

/
 * @param {string} s
 * @return {string[][]}
 */
var partition = function(s) {
    const n = s.length;
    const dp = Array.from({ length: n }, () => new Array(n).fill(true));
    // 动态规划预处理回文串
    for (let i = n - 1; i >= 0; i--) {
        for (let j = i + 1; j < n; j++) {
            dp[i][j] = s[i] === s[j] && dp[i + 1][j - 1];
        }
    }

    const res = [];
    const backtrack = (start, path) => {
        if (start === n) {
            res.push([...path]);
            return;
        }
        for (let end = start; end < n; end++) {
            if (dp[start][end]) {
                path.push(s.slice(start, end + 1));
                backtrack(end + 1, path);
                path.pop();
            }
        }
    };
    backtrack(0, []);
    return res;
};

代码解释

  1. 动态规划预处理

    力扣131 js实现

    • 初始化 dp 数组,dp[i][j] 表示子串 s[i...j] 是否为回文。
    • 从后向前遍历,利用状态转移方程 dp[i][j] = s[i] === s[j] && dp[i+1][j-1] 填充 dp
  2. 回溯搜索

    • 从起始位置 start 开始,枚举所有可能的结束位置 end
    • s[start...end] 是回文(通过 dp[start][end] 判断),将其加入当前路径 path,并递归处理剩余子串 s[end+1...]
    • 回溯时弹出 path 末尾元素,继续尝试其他分割点。
  3. 终止条件

    • start 达到字符串末尾时,将当前路径 path 加入结果集 res

复杂度分析

  • 时间复杂度:O(n·2ⁿ),其中 n 为字符串长度。最坏情况下所有子串均为回文,共有 2ⁿ 种分割方案。
  • 空间复杂度:O(n²),存储 dp 数组所需空间。

标签: 力扣js
分享给朋友:

相关文章

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现dh

js实现dh

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