Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述
给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 。
在构造过程中,请注意 区分大小写 。比如 "Aa" 不能当做一个回文字符串。
示例 1:
输入:s = "abccccdd"
输出:7
解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
示例 2:
输入:s = "a"
输入:1
示例 3:
输入:s = "bb"
输入: 2
提示:
- 1 <= s.length <= 2000
- s 只能由小写和/或大写英文字母组成
二、思路分析
- 统计字符串的字符有多少个
- 判断每个字符的数目,如果为偶数直接加,为奇数的话,则统计个数时候减一
- 统计个数是否和字符串长度一致,如果不一致,表示可以加一个落单的字符
三、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)