当前位置:首页 > 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;
}

动态规划优化回文判断

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

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通过双指针法验证子串是否为回文。

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

力扣131 js实现

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

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div c…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…