当前位置:首页 > JavaScript

力扣131 js实现

2026-03-01 16:01:27JavaScript

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

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

示例
输入:"aab"
输出:

[
  ["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. 动态规划预处理

    • 初始化 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 数组所需空间。

力扣131 js实现

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

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现跳转

js实现跳转

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

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previ…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = documen…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置…