zoukankan      html  css  js  c++  java
  • 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"))
  • 相关阅读:
    运算符重载
    简单函数template max
    const static extern
    python 关闭垃圾回收
    Easy and cheap cluster building on AWS backup
    [转] Maven更新父子模块的版本号, mvn versions:set
    [转] ansible批量执行命令展示
    HBase 批量删除表 disable_all drop_all
    自动添加 ssh key 到远程主机的脚本,应用sshpass和ssh-copy-id
    MongoDB ver 4 几个常用命令
  • 原文地址:https://www.cnblogs.com/RiverMap/p/12527304.html
Copyright © 2011-2022 走看看