题目描述:
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
代码实现:
- 中心扩展法,每个回文数都可以以一个中心扩展,两端的数都是相同的,如此想法,就可以写出中心扩展法,以一个for循环遍历字符串,确定回文数的中心,之后再写一个判断是否是回文数的函数,在这个for循环内嵌套,最后分离子串即可。
- 时间复杂度:O(n^2)
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function(s) {
var midExpand = (left, right) => {
while (left >= 0 && right < s.length && s[left] === s[right]) {
left--
right++
}
return right - left - 1
}
var start = 0, end = 0
if (s.length < 2) {
return s
}
for (var i = 0 ; i < s.length; i++ ) {
var len = Math.max(midExpand(i, i), midExpand(i, i + 1))
if (len > end - start) {
start = i - Math.floor((len - 1) / 2)
end = i + Math.floor(len / 2)
}
}
return s.substring(start, end + 1)
};