# 最长回文子串
# 题目
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案
# 思路
- 中心扩展法
- 从中间向两边扩展,直至不是回文
- 记录当前字符串,比较最大值
# 代码
function longestPalindrome(s) {
const length = s.length
if (!s) return ''
else if (length === 1) return s
else if (length === 2) return s[0] === s[1] ? s : s[0]
else {
let result = ''
/// 记录回文索引的工具函数
function getIndex(left, right, s) {
if (left >= 0 && right < s.length && s[left] === s[right]) {
left--
right++
}
return { left, right }
}
for (let i = 0; i < length; i++) {
let even = '', odd = '';
// 相邻且相同的字符串默认就是回文了
if (s[i] === s[i + 1]) {
const evenI = getIndex(i - 1, i + 2, s)
even = s.slice(evenI.left + 1, evenI.right)
}
const oddI = getIndex(i - 1, i + 1, s)
odd = s.slice(oddI.left + 1, oddI.right)
const max = odd.length > even.length ? odd : even
result = max.length > result.length ? max : result
}
return result
}
}