问题描述
给你一个字符串 s,找到 s 中最长的 回文 子串。
🌟解题思路
这道题的难度被定义为中等难度我还是挺意外的,因为我下意识就想到了解决方案
- 执行for循环
- 每次for循环时判断当前索引的最长回文字符串
- 最后判断最长的那个回文字符串
代码实现
function longestPalindrome(s) {
if (s.length < 2) return s;
let longest = '';
for (let i = 0; i < s.length; i++) {
// 寻找奇数长度的回文子串
let palindrome1 = expandAroundCenter(s, i, i);
// 寻找偶数长度的回文子串
let palindrome2 = expandAroundCenter(s, i, i + 1);
// 更新最长的回文子串
if (palindrome1.length > longest.length) {
longest = palindrome1;
}
if (palindrome2.length > longest.length) {
longest = palindrome2;
}
}
return longest;
}
function expandAroundCenter(s, left, right) {
while (left >= 0 && right < s.length && s[left] === s[right]) {
left--;
right++;
}
return s.slice(left + 1, right);
}
总结
网上对这种从中间往两边双指针循环的方法叫做采用中心扩展算法