给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:“bb”
双指针解法:
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
if(s.length<2) return s //字符串长度小于2,返回原字符串
let maxStr = ''
for(let i=0; i<s.length; i++){
doublePointer(i,i) //回文字符串长度为奇数
doublePointer(i,i+1) //回文字符串长度为偶数
}
function doublePointer(l,r){
while(s[l] == s[r] && l>=0 && r<s.length){
l--
r++
}
//上面while满足条件后多执行了一次,所以需要r-l-1, l+1
//新的回文字符串长度大于原来的,就替换
if(r-l-1 > maxStr.length){
maxStr = s.slice(l+1,r)
}
}
return maxStr
};