力扣-最长回文子串 中等 🥧

简介: 力扣-最长回文子串 中等 🥧

前言

数据结构与算法属于开发人员的内功,不管前端技术怎么变,框架怎么更新,版本怎么迭代,它终究是不变的内容。 始终记得在参加字节青训营的时候,月影老师说过的一句话,不要问前端学不学算法。计算机学科的每一位都有必要了解算法,有写出高质量代码的潜意识

一、问题描述

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

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

二、解题思路

中心扩散法

如果是回文子串的话,那么一定左右两边是对称的。那么我们就可以使用两个指针向左右两边进行扩散,找到长的子串。但是回文子串也包含两种情况。

  • 第一种:aba 这种长度为奇数的,中心就是从b开始扩散
  • 第二种: bbaabb 这种长度为偶数的,中心就得从aa扩散 我们直接看代码吧,带有注释的代码还是比较好理解的。

三、AC代码

var longestPalindrome = function(s) {
    if(s.length<2) return s // 如果长度为 0 | 1 直接返回
    let res = ''  // 存储最长的回文子串
    for(let i=0;i<s.length;i++){ // 寻找所有以字母s[i]开头的回文子串,最后选最长的
        helper(i,i) // aba 情况 两个指针指向中心节点即可
        helper(i,i+1) // abba 情况
    }
    function helper (x,y){
        // 只要两个指针指向的内容相同且不越界就不断找
        while(x>=0&&y<s.length&&s[x]==s[y]){
            x--
            y++
        }
        // 注意 在退出while循环的时候,x和y都是进行了一次不满足条件的运算
        // 例如 cabad   x,y初始为 2指向b  退出的时候 x指向c y指向d
        // 我们实际上需要的区间为 [x+1,y-1] slice 方法为左闭右开
        if(y-x-1>res.length){
            res = s.slice(x+1,y)
        }
    }
    return res
};

image.png

四、总结

字符串问题寻找回文,最长子串问题,双指针和动态规划是常见的解题思路,一般理解好题目的意思,处理边界条件,在处理一些范围不太确定的问题时,可以采用带入法。带入某个条件我写的这个放法合不合适。

后续

好了,本篇 力扣-最长回文子串 到这里就结束了,我是邵小白,一个在前端领域摸爬滚打的大三学生,欢迎👍评论。


相关文章
|
1月前
Leetcode第五题(最长回文子串)
这篇文章介绍了解决LeetCode第五题“最长回文子串”问题的一种方法,使用了中心扩展法来寻找给定字符串中的最长回文子串。
33 0
|
6月前
|
算法
LeetCode算法题---最长回文子串、N 字形变换(四)
LeetCode算法题---最长回文子串、N 字形变换(四)
41 0
|
3月前
|
Python
【Leetcode刷题Python】5. 最长回文子串
LeetCode 5题 "最长回文子串" 的Python解决方案,使用动态规划算法找出给定字符串中的最长回文子串。
44 3
|
3月前
|
算法
LeetCode第5题最长回文子串
该文章介绍了 LeetCode 第 5 题最长回文子串的解法,通过分析回文子串的特点,使用动态规划的思想,用二维数组记录字符串是否为回文串,从后往前遍历找子串,减少重复判断,最终找到最长回文子串,并总结了解题时通过举例推导找规律的思路。
LeetCode第5题最长回文子串
|
5月前
|
存储 算法 Java
【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)
56 2
|
6月前
leetcode-5:最长回文子串
leetcode-5:最长回文子串
48 0
|
6月前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
46 2
|
5月前
dp表,哈希表,力扣5.最长回文子串力扣1745.分割回文串IV力扣132.分割回文串II优先级队列(堆)是什么下面是手动实现小根堆力扣1046.最后一块石头的重量
dp表,哈希表,力扣5.最长回文子串力扣1745.分割回文串IV力扣132.分割回文串II优先级队列(堆)是什么下面是手动实现小根堆力扣1046.最后一块石头的重量
|
6月前
|
索引
力扣---最长回文子串(动态规划)
力扣---最长回文子串(动态规划)
【LeetCode 训练营 3,5】无重复字符的最长子串+最长回文子串
【LeetCode 训练营 3,5】无重复字符的最长子串+最长回文子串
92 1