题解 | 密码截取

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))

全部评论

相关推荐

nus2201602...:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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