刷题刷题
思路
- 首先找到回文串的对称中心
- 如果是奇数,对称中心在字符上
- 如果是偶数,对称中心在字符之间。
- 然后从中心扩展,判断回文子串的外层是否还存在回文的情况。
var longestPalindrome = function(s) {
if (!s || !s.length) return "";
if (s.length === 1) return s;
var result = s[0];
for (var i = 0; i < s.length; i++) {
var str1 = str2 = str = "";
if (s[i + 1] && s[i] === s[i + 1]) {
str1 = getChildString(s, i, i + 1);
}
if (s[i + 2] && s[i] === s[i + 2]) {
str2 = getChildString(s, i, i + 2);
}
str = str1 > str2 ? str1: str2;
if (str.length > result.length) {
result = str;
}
}
return result;
};
function getChildString(s, left, right) {
var str = left + 1 === right ? s[left] + s[right] : s[left] + s[left + 1] + s[right];
while (--left >= 0 && ++right < s.length) {
if (s[left] === s[right]) {
str = s[left] + str + s[right]
} else {
break;
}
}
return str;
}