1.题目描述
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。示例 1:
输入:
"abccccdd"输出:
7解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
2.解题思路
如果一个字母出现的次数为偶数,那么次数一定能构成回文串,如果一个字母出现的次数为奇数,那么次数//2 * 2一定能构成回文串。最后判断下是否有字母出现奇数次,有的话,再加一,因为可以把这个单独出现的插在中间。
3.代码实现
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: int
"""
ans = 0
count = collections.Counter(s)
flag = False
for v in count.values():
if v%2 == 1:
flag = True
ans += v//2 * 2
else:
ans += v
if flag:
ans += 1
return ans
else:
return ans