当前位置:首页 > JavaScript

力扣131 js实现

2026-01-31 00:56:40JavaScript

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

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

回溯算法实现

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

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;
}

动态规划优化回文判断

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

力扣131 js实现

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实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现密码

js实现密码

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

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…