当前位置:首页 > JavaScript

力扣131 js实现

2026-04-04 16:49:39JavaScript

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

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

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

力扣131 js实现

方法思路

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

代码实现

/
 * @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 记录当前递归路径下的分割子串。

    力扣131 js实现

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

  3. 回溯函数

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

复杂度分析

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

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

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

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现变形

js实现变形

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

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…