LeetCode 5. 最长回文子串:从暴力到Manacher的全语言实战指南
回文串问题一直是算法领域的经典课题,而寻找最长回文子串更是LeetCode等编程平台的热门题目。本文将带您从最基础的暴力解法出发,逐步深入探讨中心扩展算法,最终掌握被誉为"回文串处理终极武器"的Manacher算法。不同于普通的算法教程,我们将提供Python、Java和C++三种语言的完整实现,并分析每种解法的适用场景和优化技巧。
1. 问题定义与暴力解法
回文串是指正读反读都相同的字符串,比如"madam"、"racecar"。最长回文子串问题要求我们在给定字符串中找到最长的连续回文子序列。
1.1 暴力解法思路
最直观的解决方法是检查所有可能的子串:
python复制def is_palindrome(s, left, right):
while left < right:
if s[left] != s[right]:
return False
left += 1
right -= 1
return True
def longestPalindrome_brute(s: str) -> str:
n = len(s)
if n < 2:
return s
max_len = 1
start = 0
for i in range(n):
for j in range(i+1, n):
if j-i+1 > max_len and is_palindrome(s, i, j):
max_len = j-i+1
start = i
return s[start:start+max_len]
复杂度分析:
- 时间复杂度:O(n³) - 两层循环枚举所有子串O(n²),每个子串检查回文O(n)
- 空间复杂度:O(1)
1.2 暴力解法的局限性
当字符串长度达到1000时,暴力解法显然无法在合理时间内完成。我们需要更高效的算法。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
