PAT1 1040 Longest Symmetric String

题目链接
我的github

题目大意

给一个字符串,求它的最大回文子串

输入

每组包含一个测试用例,每个测试用例是一行字符串

输出

对每个用例,输出最大回文子串的长度

样例输入

Is PAT&TAP symmetric?

样例输出

11

解析

本题可以用manacher算法来解

# -*- coding: utf-8 -*- 
# @Time : 2019/6/3 18:56 
# @Author : ValarMorghulis 
# @File : 1040.py
def init(s):
    ns = "?#"
    for i in range(len(s)):
        ns = ns + s[i]
        ns = ns + '#'
    ns = ns + "!"
    return ns


def manacher(s):
    res = [1 for i in range(len(s))]
    mx, po = 0, 0
    for i in range(1, len(s)-1):
        if mx > i:
            res[i] = min(mx - i, res[2 * po - i])
        while s[i + res[i]] == s[i - res[i]]:
            res[i] += 1
        if res[i]+i > mx:
            mx, po = i + res[i], i
    return res


def solve():
    s = input()
    s = init(s)
    ls = manacher(s)
    print(max(ls)-1)


if __name__ == "__main__":
    solve()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值