思路
与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:resleft--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};
