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

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

前言

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

一、问题描述

给你一个字符串 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

四、总结

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

后续

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


相关文章
|
20天前
|
算法
LeetCode算法题---最长回文子串、N 字形变换(四)
LeetCode算法题---最长回文子串、N 字形变换(四)
26 0
|
20天前
leetcode-5:最长回文子串
leetcode-5:最长回文子串
25 0
|
20天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
12 2
|
20天前
|
存储 算法 Go
LeetCode第五题: 最长回文子串
给定一个字符串 `s`​,找到 `s`​ 中最长的回文子串。你可以假设 `s`​ 的最大长度为 1000。
LeetCode第五题: 最长回文子串
|
20天前
|
算法 Go
golang力扣leetcode 5.最长回文子串
golang力扣leetcode 5.最长回文子串
31 1
|
20天前
|
算法 C#
Leetcode算法系列| 5. 最长回文子串
Leetcode算法系列| 5. 最长回文子串
|
11月前
【LeetCode 训练营 3,5】无重复字符的最长子串+最长回文子串
【LeetCode 训练营 3,5】无重复字符的最长子串+最长回文子串
54 1
|
20天前
|
算法
力扣5、 最长回文子串
力扣5、 最长回文子串
|
8月前
|
存储
力扣刷题-最长回文子串
力扣刷题-最长回文子串
|
9月前
|
算法
LeetCode5-最长回文子串
LeetCode5-最长回文子串