最长回文子串
小于 1 分钟
最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
解答:
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
let start = 0, end = 0;
function getLength(str, left, right){
// 这里要非常留意左右边界的问题
while(left >= 0 && right < str.length && str[left] === str[right]){
left--
right++
}
return right-left+1
}
// 以某一个字符作为中间,看两边扩展最长的长度就是最长回文
for(let i = 0; i < s.length; i++){
const len1 = getLength(s, i, i)
const len2 = getLength(s, i, i+1)
const len = Math.max(len1, len2)
if(len > end -start){
start = i - Math.floor((len-1)/2)
end = i + Math.floor(len/2)
}
}
return s.substring(start, end+1)
};