当前位置:首页 > JavaScript

力扣131 js实现

2026-01-31 00:56:40JavaScript

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

力扣131题要求将给定字符串分割成若干子串,使得每个子串都是回文串。以下是JavaScript的实现方法:

力扣131 js实现

回溯算法实现

回溯法是解决这类问题的常见方法,通过递归尝试所有可能的分割方式。

力扣131 js实现

function partition(s) {
    const result = [];
    backtrack(s, 0, [], result);
    return result;
}

function backtrack(s, start, path, result) {
    if (start === s.length) {
        result.push([...path]);
        return;
    }

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

function isPalindrome(s) {
    let left = 0;
    let right = s.length - 1;
    while (left < right) {
        if (s[left] !== s[right]) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

动态规划优化回文判断

可以预先用动态规划计算所有子串是否为回文,减少重复计算。

function partition(s) {
    const n = s.length;
    const dp = Array(n).fill().map(() => Array(n).fill(false));
    const result = [];

    for (let i = 0; i < n; i++) {
        for (let j = 0; j <= i; j++) {
            if (s[i] === s[j] && (i - j <= 2 || dp[j+1][i-1])) {
                dp[j][i] = true;
            }
        }
    }

    backtrack(s, 0, [], result, dp);
    return result;
}

function backtrack(s, start, path, result, dp) {
    if (start === s.length) {
        result.push([...path]);
        return;
    }

    for (let end = start; end < s.length; end++) {
        if (dp[start][end]) {
            path.push(s.slice(start, end + 1));
            backtrack(s, end + 1, path, result, dp);
            path.pop();
        }
    }
}

代码说明

  1. 回溯算法:通过递归尝试所有可能的分割点,每次分割后检查子串是否为回文。
  2. 动态规划优化:预先构建二维数组dp,其中dp[i][j]表示子串s[i..j]是否为回文,避免重复计算。
  3. 回文判断函数isPalindrome通过双指针法验证子串是否为回文。

这两种方法都能正确解决问题,动态规划优化版本在大输入时性能更优。

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

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

css3结合js制作

css3结合js制作

CSS3 结合 JavaScript 制作动态效果 CSS3 和 JavaScript 结合可以实现丰富的动态效果,包括动画、交互和响应式设计。以下是几种常见的实现方式: CSS3 动画与 Java…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js实现图片

js实现图片

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