409. 最長回文串
給定一個包含大寫字母和小寫字母的字符串姐扮,找到通過這些字母構(gòu)造成的最長的回文串阵翎。
在構(gòu)造過程中嫁艇,請注意區(qū)分大小寫愉阎。比如 "Aa" 不能當做一個回文字符串。
示例:
輸入:“abcccdd”
輸出:“7”
解釋:可以構(gòu)造的最長回文串是“dccaccd”恬总,長度是7
解題思路:
只要是出現(xiàn)次數(shù)為偶數(shù)的字符鸣峭,直接加上它的出現(xiàn)次數(shù)宏所;出現(xiàn)次數(shù)為奇數(shù)的字符,加上它的出現(xiàn)次數(shù)減1(保持回文串的對稱性)摊溶。如果有奇數(shù)出現(xiàn)的話爬骤,最后結(jié)果再加上1,因為回文串允許最中間的字符串為奇數(shù)個莫换。
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: int
"""
res = odd = 0
cnt = collections.Counter(s)
for v in cnt:
res += cnt[v]
if cnt[v] % 2 == 1:
res -= 1
odd += 1
return res + (odd > 0)