1、题目描述
给定一个字符串 s,找到 s 中最长的回文子串。
2、解题思路
1、定义一个函数用来计算回文子串的长度
1.1、回文子串有两种情况:aba型、abba型
1.2、使用中心扩展的方法找到回文直径
2、遍历给定字符串,比较两种情况回文子串的长度
3、使用位运算符求差值从而取得该最长回文子串的始末索引
4、返回上述始末索引的子字符串,即为所求最长回文子串
3、解题代码
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
if(!s || s.length < 2){
return s;
}
let start = end = 0;
let len = s.length;
let centerExpend = (left,right) => {
while(left >= 0 && right < len && s[left] == s[right]){
left--;
right++;
}
return (right - left) - 1;
}
for(let i = 0;i < len;i++){
let len1 = centerExpend(i,i);
let len2 = centerExpend(i,i+1);
let maxLen = Math.max(len1,len2);
if(maxLen > end - start){
start = i - ((maxLen - 1) >> 1);
//end = i + (maxLen >> 1) + 1;
end = start + maxLen;
}
}
return s.substring(start,end);
};