刷题日记-409. 最长回文串

96 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述

409. 最长回文串

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

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

 

示例 1:

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

示例 2:

输入:s = "a"
输入:1

示例 3:

输入:s = "bb"
输入: 2

 

提示:

  • 1 <= s.length <= 2000
  • s 只能由小写和/或大写英文字母组成

二、思路分析

  1. 统计字符串的字符有多少个
  2. 判断每个字符的数目,如果为偶数直接加,为奇数的话,则统计个数时候减一
  3. 统计个数是否和字符串长度一致,如果不一致,表示可以加一个落单的字符

三、AC 代码

class Solution:
    def longestPalindrome(self, s: str) -> int:
        d=Counter(s)
        n=len(s)
        ans=0
        
        for k in d.values():
            if k%2==0:
                ans=ans+k
            elif k>1:
                ans=ans+k-1
        
        if ans != n:
            ans=ans+1

        return ans

四、总结

没有想到贪心的解法,官方答案要好好参悟下。

范文参考

409. 最长回文串 - 最长回文串 - 力扣(LeetCode) (leetcode-cn.com)

哈希表+counter()+一次遍历解决,28ms,15MB - 最长回文串 - 力扣(LeetCode) (leetcode-cn.com)