📌  相关文章
📜  打印给定字符串的最长回文前缀(1)

📅  最后修改于: 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)。