题解 | #密码截取#

密码截取

https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1

# 辅助函数,围绕中心扩展并检查回文
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[left + 1 : right]


# 主函数,查找最长回文子串
def longestPalindrome(s):
    # 初始化最大长度和最大子串变量
    max_len = 0
    max_s = ""
    # 遍历字符串中的每个字符
    for i in range(len(s)):
        # 围绕字符本身作为中心扩展
        len1, s1 = expand(s, i, i)
        # 围绕字符及其下一个作为中心扩展
        len2, s2 = expand(s, i, i + 1)
        # 选择两者中的更长回文子串
        if len1 > len2:
            curr_len = len1
            curr_s = s1
        else:
            curr_len = len2
            curr_s = s2
        # 如果当前回文子串更长,则更新max_len和max_s变量
        if curr_len > max_len:
            max_len = curr_len
            max_s = curr_s
    # 返回最长回文子串
    return max_s


# 测试你的代码
s = input()
print(len(longestPalindrome(s)))

自己的动规代码a了20/23,看看新bing写的

全部评论

相关推荐

accaacc:2到4k,不是2k到4k,所以年薪是30块
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务