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"))
  • 相关阅读:
    python 统计gitlab代码量
    whistle 模拟用户网络超时
    Node.js 快速转换 url 链接
    实用的 Git 命令
    前端常用 prettier 配置 + vetur 配置
    vue 项目 eslint + prettier 配置
    lodash 方法 debounce 防连点 防抖按钮点击
    npm 包实现自动登录 CICD 流程
    git push --follow-tags 命令
    小程序 iOS webview 中网页使用 iframe 无法滚动问题
  • 原文地址:https://www.cnblogs.com/RiverMap/p/12527304.html
Copyright © 2011-2022 走看看