一、题目描述
给你一个字符串 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
};
五、结果