当前位置: 面试刷题>> 最长回文子串 (经典算法题500道)


### 题目描述 给定一个字符串 `s`,找到 `s` 中最长的回文子串。你可以假设 `s` 的最大长度为 1000。 **回文子串** 是指一个字符串从前往后读和从后往前读是完全相同的字符串。 ### 示例 **输入**: "babad" **输出**: "bab" 或 "aba" **输入**: "cbbd" **输出**: "bb" ### PHP 示例代码 ```php function longestPalindrome($s) { $n = strlen($s); if ($n < 2) { return $s; } $start = 0; $maxLength = 1; // 辅助函数,用于检查回文 function expandAroundCenter($left, $right, $s) { while ($left >= 0 && $right < strlen($s) && $s[$left] == $s[$right]) { $left--; $right++; } return strlen($s) - $right + $left + 1; } // 遍历所有可能的中心 for ($i = 0; $i < $n - 1; $i++) { // 奇数长度回文 $len1 = expandAroundCenter($i, $i, $s); // 偶数长度回文 $len2 = expandAroundCenter($i, $i + 1, $s); $len = max($len1, $len2); // 如果当前长度大于已知的最大长度,则更新 if ($len > $maxLength) { $start = $i - floor(($len - 1) / 2); $maxLength = $len; } } return substr($s, $start, $maxLength); } // 测试示例 echo longestPalindrome("babad"); // 输出: bab 或 aba echo longestPalindrome("cbbd"); // 输出: bb ``` ### Python 示例代码 ```python def longestPalindrome(s: str) -> str: if len(s) < 2: return s start, maxLength = 0, 1 def expandAroundCenter(left: int, right: int) -> int: while left >= 0 and right < len(s) and s[left] == s[right]: left -= 1 right += 1 return right - left - 1 for i in range(len(s) - 1): # 奇数长度回文 len1 = expandAroundCenter(i, i) # 偶数长度回文 len2 = expandAroundCenter(i, i + 1) max_len = max(len1, len2) if max_len > maxLength: start = i - (max_len - 1) // 2 maxLength = max_len return s[start:start + maxLength] # 测试示例 print(longestPalindrome("babad")) # 输出: bab 或 aba print(longestPalindrome("cbbd")) # 输出: bb ``` ### JavaScript 示例代码 ```javascript function longestPalindrome(s) { let start = 0, maxLength = 1; function expandAroundCenter(left, right) { while (left >= 0 && right < s.length && s[left] === s[right]) { left--; right++; } return right - left - 1; } for (let i = 0; i < s.length - 1; i++) { let len1 = expandAroundCenter(i, i); // 奇数长度 let len2 = expandAroundCenter(i, i + 1); // 偶数长度 let len = Math.max(len1, len2); if (len > maxLength) { start = i - Math.floor((len - 1) / 2); maxLength = len; } } return s.substr(start, maxLength); } // 测试示例 console.log(longestPalindrome("babad")); // 输出: bab 或 aba console.log(longestPalindrome("cbbd")); // 输出: bb ``` **码小课网站中有更多相关内容分享给大家学习**,希望这些示例代码能帮助到你!
推荐面试题