算法 最长回文子字符串
5.最长回文子串
思路:
- 如果字符串的长度小于2,那么就直接返回
- 定义两个变量,一个start存储当前找到的最大回文字符串的位置,另一个maxLength记录字符串的长度(终止位置就是start+maxLength)
- 创建一个函数helpr function,判断左边和右边是否越界,同时最左边的字符是否等于最右边的字符,如果以上3个条件都满足,则判断是否需要更新回文字符串最大长度及最大字符串的起始位置。然后将
left--
,right++
,继续判断,直到不满足三个条件之一- 遍历字符串,每个位置调用helper遍历两遍,第一遍检查
i-1,i+1
,第二遍检查i,i+1
回文字符串的长度为奇数,那么就会在i-1,i+1
的helper
调用中得到
回文字符串的长度为偶数,那么就会在i,i+1
的helper
调用中到
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function (s) {
if (s.length < 2) return s
let start = 0
let maxLength = 1
var help = function (left, right) {
while (left >= 0 && right < s.length && s[left] === s[right]) {
if (right - left + 1 > maxLength) {
maxLength = right - left + 1
start = left
}
left--
right++
}
}
for (let i = 0; i < s.length; i++) {
help(i - 1, i + 1)
help(i, i + 1)
}
return s.substring(start, start + maxLength)
};