Given a string which consists of lowercase or uppercase letters, find the length of the longest palindromes that can be built with those letters.
This is case sensitive, for example “Aa” is not considered a palindrome here.
Note:
Assume the length of given string will not exceed 1,010.
Example:
Input:
“abccccdd”
Output:
7
Explanation:
One longest palindrome that can be built is “dccaccd”, whose length is 7.
回文串包含两种形式:aba形式及aaa形式。在给出的字符串中,所有出现次数为偶数的字母都可以用为回文串中;若有出现次数为奇数的字母,则先将其包含的最大偶数次加入回文串长度中(即奇数次数减1),再在最后加上放在最中间的一个字母。
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: int
"""
if not s:
return 0
if len(set(s))==1:
return len(s)
dicts={}
lens=len(s)
maxL=0
oddL=0
for i in range(lens):
if s[i] in dicts:
dicts[s[i]] += 1
else:
dicts[s[i]]=1
for v in dicts.values():
if v%2==0:
maxL += v
else:
maxL += (v-1)
oddL += 1
if oddL>0:
return maxL+1
else:
return maxL
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: int
"""
hash = set()
for c in s:
if c not in hash:
hash.add(c)
else:
hash.remove(c)
# len(hash) is the number of the odd letters
return len(s) - len(hash) + 1 if len(hash) > 0 else len(s)