对于一个字符串,计算其中最长回文子串的长度

109 阅读1分钟

要计算一个字符串中最长回文子串的长度,你可以使用动态规划或者中心扩展法。以下是使用中心扩展法的 Python 代码示例:

def longest_palindrome(s):  
    def expand_around_center(left, right):  
        while left >= 0 and right < len(s) and s[left] == s[right]:  
            left -= 1  
            right += 1  
        return right - left - 1  
  
    if not s:  
        return 0  
  
    start = 0  
    max_len = 1  
    for i in range(len(s)):  
        # 检查奇数长度的回文  
        len1 = expand_around_center(i, i)  
        # 检查偶数长度的回文  
        len2 = expand_around_center(i, i + 1)  
        max_len = max(max_len, len1, len2)  
        if max_len > (len(s) - i):  
            # 剩余部分不可能有更长的回文  
            break  
  
    # 使用找到的回文起始位置和长度,获取最长回文子串  
    return s[start:start + max_len]  
  
# 示例  
s = "babad"  
print(longest_palindrome(s))  # 输出: "bab"

在这个示例中,longest_palindrome 函数接受一个字符串 s 作为输入,并使用中心扩展法来查找最长的回文子串。expand_around_center 函数用于从给定的中心位置向两侧扩展,以找到最长的回文。主函数遍历字符串的每个字符,并检查以该字符为中心的最长回文(奇数长度)和以该字符及其右侧字符为中心的最长回文(偶数长度)。最后,它返回找到的最长回文子串。