• LeetCode最长回文串


    题目描述:

    给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

    在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

    注意:假设字符串的长度不会超过 1010。

    示例:

    输入:
    "abccccdd"
    
    输出:
    7
    
    解释:
    我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。

    解题思路:

    思路:我们首先必须要跳出惯性思维,观察一个能构成回文串的字符串,如“abccccdd”。可以发现:既然能构成回文串,那么其回文中心(即:示例中的"a")必须是奇数,回文中心两侧的字符都将是偶数个。也就是说,当系统给我们一个字符串 s ,首先要得到这个字符串中每个字符出现的次数,如果这个字符出现的次数为偶数个,则长度 + 这个偶数(初始长度为0)。如果这个字符出现次数为奇数个,则长度+ 此个数 - 1(为什么减1:因为回文中心只有一个,且必须是奇数,当遍历结束后在加1即可)。

    代码:

    def solution(s: str) -> int:
    ans = 0 # 回文串的总长度
    flag = False # 判断字符串s中是否有字符为奇数的,有为True
    count = collections.Counter(s) # 这里可以用 for 循环生成一个dict代替collections模块
    for v in count.values():
    if v % 2 == 0: 字符个数为偶数时
    ans += v
    else: # 字符个数为奇数时
    ans += v -1
    flag = True
    if flag:
    ans += 1
    return ans

    print(solution("abccccdd"))
  • 相关阅读:
    LINQ学习系列-----1.3 扩展方法
    表单重复提交的三种情况及解决办法
    JDBC的简单封装
    Java学习路线图
    成为一名Java高级工程师你需要学什么
    站在烦恼里仰望幸福
    如何发布Web项目到互联网
    用户管理的设计--2.新增用户信息实现
    MD5加密工具
    springMvc注解之@ResponseBody和@RequestBody
  • 原文地址:https://www.cnblogs.com/RiverMap/p/12527304.html
Copyright © 2020-2023  润新知