思路
与647一样的解法,多了要判断哪个最长的步骤。
下面这种写法性能比较好,我一开始是在while里就一直slice字符串来判断长度,浪费性能。
var longestPalindrome = function(s) {
// 基于中心扩散法
let result =''
const findMaxPalindrome =function(s,left,right){
while(left>=0&&right<s.length&&s[left]===s[right]){
// 找到回文,开始比较长度
// 这里超时,频繁操作slice
// let subStr =s.slice(left,right+1)
// res =subStr.length>res.length? subStr:res
left--
right++
}
// 注意此处left,right的值循环完后 是恰好不满足循环条件的时刻
// 此时left到right的距离为right-left+1,但是两个边界不能取 所以应该取left+1到right-1的区间
if (right - left - 1 > result.length) {
// slice也要取[left+1,right-1]这个区间
result = s.slice(left + 1, right)
}
return result
}
for(let i=0;i<s.length;i++){
findMaxPalindrome(s,i,i)
findMaxPalindrome(s,i,i+1)
}
return result
};