Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Leetcode5最长回文子串(中心拓展法和动态规划法)

Leetcode5最长回文子串(中心拓展法和动态规划法)

原创
作者头像
伯约同学
发布于 2022-03-28 15:01:51
发布于 2022-03-28 15:01:51
35800
代码可运行
举报
运行总次数:0
代码可运行

Leetcode5最长回文子串(中心拓展法和动态规划法)

给你一个字符串s,找到s中最长的回文子串。

答题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 \* @param {string} s
 \* @return {string}
 */
var longestPalindrome = function longestPalindrome(s){
  let n = s.length;
  let res = '';
  let dp = Array.from(new Array(n),() => new Array(n).fill(false));for(let i = n-1; i >= 0; i--){for(let j = i; j < n; j++){
•      dp[i][j] = s[i] == s[j] && (j - i < 3 || dp[i+1][j-1]);if(dp[i][j] && j - i + 1 > res.length){
•        res = s.substring(i,j+1);}}
  }
  return res;
};

这道题一般有两种做法,一个是上面给出的动态规划解法

还有一个是中心拓展法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function(s) {
    if(s.length < 2) {
        return s
    }let start = 0
    let maxLength = 1
    function expandAroundCenter(left, right) {
        while(left >= 0 && right < s.length && s[left] === s[right]) {
            if(right - left + 1 > maxLength) {
                maxLength = right - left + 1
                start = left
            }
            left--
            right++
        }
    }
    for(let i=0; i<s.length; i++) {
        expandAroundCenter(i - 1, i + 1)
        expandAroundCenter(i, i + 1)
    }
    return s.substring(start, start + maxLength)
};

动态规划方法就是设一个数组“dp[i] [j]“”代表的是字符串从i到j位置的能否构成一个回文子串,其中动态转移方程的边界条件分两种情况,针对一个字符串而言,它总是回文,针对两个字符串而言,需要看这两个相邻的字符串是否相等。而转移方程则是这样判断的;i+1到j、i到j-1、i+1到j-1是否是回文,如果是的话,则dp[i] [j]也是回文。同时更新一下res的长度

中心扩散方法则是以某个字符串为起点,判断以它为中心的字符串是否是回文,或者判断以i和i+1为中心的字符串是否是回文。

前者空间换时间,减少了一些计算,还是值得好好学一下的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
算法Code-最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 长度最长为1000。
磊叔的技术博客
2025/06/07
560
算法Code-最长回文子串
【LeetCode热题100】【多维动态规划】最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串,如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
叶茂林
2024/04/24
1470
leetcode 5. 最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2: 输入:s = "cbbd" 输出:"bb" 提示: 1 <= s.length <= 1000 s 仅由数字和英文字母组成 原题链接 /** * @param {string} s * @return {string} */ // 动态规划实现 var longestPalindrome = function(s) { let l
蓓蕾心晴
2022/11/18
2200
【字符串】最长回文子串 ( 动态规划算法 ) ★
" 回文串 ( Palindrome ) " 是 正反都一样的字符串 , abccba , 001100 等字符串 ;
韩曙亮
2023/03/29
7250
【字符串】最长回文子串 ( 动态规划算法 ) ★
LeetCode 0005. 最长回文子串[动态规划详解]
本题可以使用动态规划来做,但是直接遍历每个字符串/每两个字符串空隙,向左右延展求最长回文子串也是可以的,思路比较暴力直接,详情见代码 1。
Yano_nankai
2021/03/02
4010
LeetCode 0005. 最长回文子串[动态规划详解]
Leetcode 5:最长回文子串(最详细的解法!!!)[通俗易懂]
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
全栈程序员站长
2022/09/03
6920
Leetcode 5:最长回文子串(最详细的解法!!!)[通俗易懂]
多种思路秒杀经典面试题最长回文子串
大家好,我是程序员小熊,来自大厂的程序猿。最长回文子串是面试中常考的题目,尤其是一些互联网大厂,像亚马逊、微软、脸书、字节和腾讯等都考过这道题。
程序员小熊
2021/05/28
6540
多种思路秒杀经典面试题最长回文子串
算法修炼之筑基篇——筑基二层初期(解决最长回文子串问题,马拉车(manacher)算法模板)
通过填充动态规划表格 dp,可以找到最长回文子串的长度和起始位置。该方法的时间复杂度为 O(n^2)。
命运之光
2024/03/20
2830
算法修炼之筑基篇——筑基二层初期(解决最长回文子串问题,马拉车(manacher)算法模板)
leetcode Problem 5 最长子回文串
1、暴力做法。 遍历所有的子串,求出最长。复杂度O(n3)。显然GG了。 2、动态规划 把一个大问题分解成每一个小问题进行求解。假设字符串s,则s[i]到s[j]是回文的话,s[i+1]到s[j-1]也是回文;或者说,已知s[i+1]到s[j-1]是回文的情况下,如果s[i]==s[j]则,s[i]到s[j]就是回文,我们用数组table[i][j]来表示i到j的是否回文状态。代码如下,复杂度是o(n2)。
ACK
2020/01/14
3040
leetcode Problem 5 最长子回文串
LeetCode 最长回文子串(动态规划)
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
SakuraTears
2022/01/13
8610
Leetcode|线性序列|5. 最长回文子串(动规+双指针中心扩展)
本题和《Leetcode|线性序列|647. 回文子串》 很像,只是转而输出最长回文子串,但方法相同,单独对比每次回文子串大小,取最大和对应子串起始索引即可
SL_World
2021/09/18
3680
005. 最长回文子串 | Leetcode题解
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
苏南
2020/12/16
4890
005. 最长回文子串 | Leetcode题解
LeetCode【5】-- 最长回文子串(3种解法)
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palindromic-substring,著作权归领扣网络所有。
秦怀杂货店
2022/02/15
3070
LeetCode【5】-- 最长回文子串(3种解法)
最长回文子串(动态规划)
酒楼
2023/12/30
1670
LeetCode 5. Longest Palindromic Substring分析
判断一个字符串是不是回文串,可以用动态规划方法 dp[i][j]:表示i到j的字符串,是不是回文串,是就为true,不是就为false 那么当s[i] == s[j]的时候,dp[i][j] = dp[i+1][j-1],这是根据回文串的特点,比较容易理解的,比如我们知道bab是回文串,如果a = a,那么ababa也就是回文串! 所以我们可以用动态规划法求出最长回文串,然后也知道了他的起始位置,i和j,所以就比较容易求解了,唯一注意的问题是,我们得倒着求,而不能跟往常一样顺着求解,因为状态转移方程的依赖关系,是倒着依赖的。
desperate633
2018/08/22
3080
Leetcode算法系列| 5. 最长回文子串
游戏开发小Y
2024/01/18
1850
Leetcode算法系列| 5. 最长回文子串
最长回文子串 -- 三种解答
链接:https://leetcode-cn.com/problems/longest-palindromic-substring,著作权归领扣网络所有。
秦怀杂货店
2021/10/08
3090
LeetCode(4-寻找两个正序数组的中位数&&5-最长回文子串&&6-Z形变换)
如果觉得UP写的不错的话,可以点击上方蓝字关注哦,后续会持续更新LeetCode题解.
萌萌哒的瓤瓤
2021/02/07
4470
LeetCode(4-寻找两个正序数组的中位数&&5-最长回文子串&&6-Z形变换)
LeetCode-5-最长回文字串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
benym
2022/07/14
1950
LeetCode 5. 最长回文子串(动态规划)
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
Michael阿明
2020/07/13
5620
推荐阅读
相关推荐
算法Code-最长回文子串
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验