题解 | 密码截取

def longest_palindrome(s: str) -> int:
    n = len(s)
    if n < 2:
        return n

    # 初始化 dp 数组
    dp = [[False] * n for _ in range(n)]
    max_len = 1

    # 单个字符总是回文
    for i in range(n):
        dp[i][i] = True
        max_len = max(max_len, 1)

    # 两个字符相同的字符也是回文
    for i in range(n - 1):
        if s[i] == s[i + 1]:
            dp[i][i + 1] = True
            max_len = max(max_len, 2)

    # 检查更长的回文
    for length in range(3, n + 1):
        for i in range(n - length + 1):
            j = i + length - 1
            if s[i] == s[j] and dp[i + 1][j - 1]:
                dp[i][j] = True
                max_len = max(max_len, length)

    return max_len

# 示例输入
s = input().strip()
# 输出最长有效密码串的长度
print(longest_palindrome(s))

全部评论

相关推荐

10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务