给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入:"babad"
输出:"bab"
注意:"aba" 也是一个有效答案。
示例 2:
输入:"cbbd"
输出:"bb"
解析: 中心扩散法:从每一个位置出发,向两边扩散即可。
首先往左寻找与当前位置相同的字符,直到遇到不相等为止。
然后往右寻找与当前位置相同的字符,直到遇到不相等为止。
最后左右双向扩散,直到左和右不相等。
varlongestPalindrome=function(s){let len =0;// 记录每一个元素为中心元素时的回文串的长度// 记录最终回文串的左右起点let mLeft =0;let mright =0;for(let i =0; i < s.length; i++){// 中心扩展法: 对每一个元素都进行中心扩展,最后截取最长的。let left = i -1;let right = i +1;// 如果左元素与中心元素一样,即纳入回文串中,left--,直到不相等为止while(left >=0&& s.charAt(left)=== s[i]){
left --;}// 如果右元素与中心元素一样,即纳入回文串中,right++,直到不相等为止while(right <s.length && s.charAt(right)=== s[i]){
right ++;}// 如果左右元素相等,同样纳入回文串,left--,right++,直到不相等为止while(left >=0&& right <s.length && s.charAt(left)=== s.charAt(right)){
left --;
right++;}// 比较当前回文串的长度与上次回文串的长度if((right - left -1)> len ){
len = right -left -1;
mLeft = left +1;
mright = right;}}return s.slice(mLeft,mright);};