当前位置:首页 > JavaScript

力扣131 js实现

2026-04-04 16:49:39JavaScript

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

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

示例
输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

方法思路

回溯法适合解决此类组合问题。通过递归探索所有可能的分割方式,并在每一步检查当前子串是否为回文,如果是则继续递归剩余部分。

代码实现

/
 * @param {string} s
 * @return {string[][]}
 */
const partition = function(s) {
    const result = [];
    const path = [];

    const isPalindrome = (str, left, right) => {
        while (left < right) {
            if (str[left] !== str[right]) return false;
            left++;
            right--;
        }
        return true;
    };

    const backtrack = (start) => {
        if (start === s.length) {
            result.push([...path]);
            return;
        }
        for (let end = start; end < s.length; end++) {
            if (isPalindrome(s, start, end)) {
                path.push(s.substring(start, end + 1));
                backtrack(end + 1);
                path.pop();
            }
        }
    };

    backtrack(0);
    return result;
};

代码解析

  1. 初始化结果和路径
    result 存储所有合法的分割方案,path 记录当前递归路径下的分割子串。

  2. 回文判断函数
    isPalindrome 通过双指针法验证子串 s[left...right] 是否为回文。

  3. 回溯函数

    力扣131 js实现

    • 终止条件:当起始索引 start 达到字符串长度时,将当前 path 加入 result
    • 递归过程:遍历可能的子串结束位置 end,若 s[start...end] 是回文,则将其加入 path 并递归处理剩余部分 end + 1,最后回溯移除当前子串。

复杂度分析

  • 时间复杂度:O(N * 2^N),最坏情况下所有子串均为回文,共有 2^N 种分割方式,每次判断回文需 O(N)。
  • 空间复杂度:O(N),递归栈深度最多为字符串长度。

此方法通过回溯高效枚举所有可能的分割方案,适合处理中等规模输入。

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

相关文章

js实现

js实现

JavaScript 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现计算器

js实现计算器

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

js实现vue路由

js实现vue路由

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

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…