📅  最后修改于: 2023-12-03 14:54:29.833000             🧑  作者: Mango
回文是指一个字符串从头到尾和从尾到头读都是一样的,例如 "level" 或 "racecar"。回文前缀是指一个字符串从头开始,一直到某个位置仍然是回文串的前缀,例如对于字符串 "abacabad",它的回文前缀就是 "a"、"aba" 和 "abacaba"。
本篇文章介绍了如何打印给定字符串的最长回文前缀。算法思想是从字符串中心向两端扩散,找到最长的回文前缀。
下面是 Python3 的代码实现:
def longest_palindrome_prefix(s: str) -> str:
"""
打印给定字符串的最长回文前缀
"""
n = len(s)
if n == 0:
return ""
# 如果字符串长度是奇数,则中心为一个字符,否则中心为两个字符
center = n // 2
if n % 2 == 0:
left = center - 1
right = center
else:
left = center
right = center
while left >= 0 and right < n:
if s[left] == s[right]:
prefix = s[left:right+1]
if prefix == prefix[::-1]:
return prefix
left -= 1
right += 1
return ""
输入:s = "babad" 输出:"bab"
输入:s = "cbbd" 输出:"c"
输入:s = "" 输出:""
本文介绍了如何打印给定字符串的最长回文前缀,通过从字符串中心向两端扩散的方式,找到最长的回文前缀。实现比较简单,时间复杂度为 O(n^2),空间复杂度为 O(1)。