+6 投票
分类:问答挑战 | 用户: 10 9 8 (5.7k 分)
给定一个字符串s,编写一个Python函数,该函数将返回s中最长的回文子串。回文串是正着读和倒着读都一样的字符串。例如,对于输入字符串s="babad",函数应该返回"bab"。

1个回答

+1 投票
用户: 10 10 9 (8.6k 分)
采纳于 用户:
 
已采纳
def longest(s):
    if len(s) < 2:
        return s
    start = 0
    end = 0
    for i in range(len(s)):
        # 以i为中心扩散得到的奇数长度的回文序列的长度
        len1 = expand(s, i, i)
        # 以i和i+1为中心扩散得到的偶数长度的回文序列的长度
        len2 = expand(s, i, i+1)
        # 选一个更长的
        length = max(len1, len2)
        # 判断是否比之前更长
        if length > end - start:
            start = i - (length - 1) // 2
            end = i + length // 2

    return s[start:end+1]

def expand(s, left, right):
    '''向两端扩散'''
    while left >= 0 and right < len(s) and s[left] == s[right]:
        left -= 1
        right += 1
    # 返回此序列的长度
    return right - left - 1
s='babad'
longest(s)

输出为’bab’

用户: 8 5 3 (2.1k 分)
输出结果为aba?
欢迎来到 在线问答系统 ,有什么不懂的可以尽管在这里提问,你将会收到社区其他成员的回答。
...