LeetCode 「中等」5.最长回文子串
题目描述
给你一个字符串 s,找到 s 中最长的回文子串。
示例
输入:s = "babad"
输出:"bab"
输入:s = "cbbd"
输出:"bb"
解答
中心扩展法
中心扩展法的思想是:以每个字符(单个字符或两个连续字符)为中心,向两边扩展,直到不再是回文为止。
实现步骤:
- 遍历每个字符,将其作为中心
- 对于每个中心,分别扩展奇数长度和偶数长度的回文
- 记录最长的回文子串
Code
/**
* @param {string} s
* @return {string}
*/
var expandAroundCenter = function(s, lk, rk) {
while (lk >= 0 && rk < s.length && s[lk] === s[rk]) {
--lk;
++rk;
}
return [lk + 1, rk - 1];
};
var longestPalindrome = function(s) {
let lp = '';
for (let i = 0; i < s.length; ++i) {
const [lk1, rk1] = expandAround(s, i, i);
const [lk2, rk2] = expandAround(s, i, i + 1);
const palindrome1 = s.slice(lk1, rk1 + 1);
const palindrome2 = s.slice(lk2, rk2 + 1);
if (palindrome1.length > lp.length) lp = palindrome1;
if (palindrome2.length > lp.length) lp = palindrome2;
}
return lp;
}
