5. 最长回文子串「力扣」
题目描述
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
解题
回文字符串,无非有两种类型,ada
和baab
,分为奇偶长度两种。
单考虑偶数的话,如下:
分析👇
// 现有一字符串 str
const str = 'cbaabc'
// 当
str[2]===str[3]
str[1]===str[4]
str[0]===str[5]
// 则 str 为回文字符串
有没有看出什么规律,左侧的下标做减法,右侧的下标做加法。只要都相等,即是回文字符串!
源码如下:
var longestPalindrome = function(s) {
let str = ''
if(s.length < 2) return s
for(let i = 0, len = s.length; i < len; i++) {
let l1 = i, r1 = i
let l2 = i, r2 = i + 1
// 判断奇数长度的
while(l1 > -1 && r1 < len && s[l1] === s[r1]) {
r1 - l1 + 1 > str.length && (str = s.slice(l1, r1 + 1))
l1--
r1++
}
// 判断偶数长度的
while(l2 > -1 && r2 < len && s[l2] === s[r2]) {
r2 - l2 + 1 > str.length && (str = s.slice(l2, r2 + 1))
l2--
r2++
}
}
return str
};