题目:
思路:
1.回文字符长度有偶数个或奇数个,所以要枚举当前字符和(下一个字符与当前字符)是回文数的情况,取两种情况的最大值;判断回文长度函数center();
2.维护一个left和right,记录当前情况回文串跨度最长时的下标,如果有更长的回文串就更新left和left;
3.最后使用slice截取字符串返回;
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function (s) {
if (s.length < 2) return s;
let maxlen = 0, left = 0, right = 0;
for (let i = 0; i < s.length - 1; i++) {
let l1 = center(s, i, i)
let l2 = center(s, i, i + 1)
maxlen = Math.max(l2, l1);
if (maxlen > right - left) {
left = i - Math.floor((maxlen - 1) / 2);
right = i + Math.floor(maxlen / 2)
}
}
return s.slice(left + 1, right)
};
function center(s, left, right) {
while (s[left] == s[right] && left >= 0 && right < s.length) {
left--;
right++;
}
return right - left + 1;
}
坚持每日一题!坚持!坚持!