最长回文串
题目描述:
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例:
输入:“abccccdd”
输出:7
解释:我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
解法
先统计各字符出现的次数,如果次数是偶数,那么肯定可以作为回文串的一部分;如果是奇数,那么可以少用 1 个字符,作为回文串的一部分;最后如果有奇数次的字符,可以作为中心,也就是可以多使用一个字符。
代码
class Solution:
def longestPalindrome(self, s: str) -> int:
counter = Counter(s)
res, flag = 0, False
for value in counter.values():
if value % 2 == 0:
res += value
else:
res += value - 1
flag = True
return res + 1 if flag else res
测试结果
执行用时:36 ms, 在所有 Python3 提交中击败了 52.57%的 用户
内存消耗:15 MB, 在所有 Python3 提交中击败了 38.62% 的用户
说明
算法题来源:力扣(LeetCode)