Leetcode刷题(第5题)——最长回文子串

x33g5p2x  于2022-02-24 转载在 其他  
字(0.8k)|赞(0)|评价(0)|浏览(310)

一、题目描述

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

二、示例

示例 1:

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

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

三、解题思路
我们要明白最长回文子串的特点,最长回文子串的特点是呈现对称的现象,比如说aabbaa,或者aba,都是对称的。所以此时我们可以分为两种情况,一种是最长回文子串为奇数长度,另一种为偶数长度奇数长度的从中间哪一个分别向左向右对比,两边都相等即可。偶数长度的回文子串从中间的那一个和下一个字符开始,左边的不断向左移动,右边的不断向右移动,两者保持相等。
四、代码展示

/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function (s) {
    const getStr = (s, l, r) => {
        while (l >= 0 && r < s.length && s[l] === s[r]) {
            l--;
            r++
        }
        return s.substr(l + 1, r - l - 1)
    }
    let res1 = ""
    let res2 = ""
    let res = ""
    let left = 0;
    let len = s.length
    for (; left <= len - 1; left++) {
        res1 = getStr(s, left, left)
        res2 = getStr(s, left, left + 1)
        res = res.length > res1.length ? res : res1
        res = res.length > res2.length ? res : res2
    }
    return res
};

五、结果

相关文章