Longest Palindrome

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.

题目大意:

给定一个只包含小写或者大写字母的字符串,寻找用这些字母可以组成的最长回文串的长度。

大小写敏感,例如"Aa"在这里不认为是一个回文。

注意:

假设给定字符串的长度不超过1000。

解题思路:

统计每个字母的出现次数:

若字母出现偶数次,则直接累加至最终结果

若字母出现奇数次,则将其值-1之后累加至最终结果

若存在出现奇数次的字母(可存在一个奇书),将最终结果+1。(一旦出现奇书,则使odd=1,无论出现多少次奇书,都只等于1,因为最后结果只允许出现一个奇书)

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: int
        """
        """
        hashmap = {}
        for item in s:
            if item in hashmap:
                hashmap[item] += 1
            else:
                hashmap[item] = 1
        """
        hashmap = collections.Counter(s)    
        result = 0
        odd = 0
        for item in hashmap:
            if hashmap[item] % 2 == 0:
                result += hashmap[item]
            else:
                result += hashmap[item] - 1
                odd = 1
        return result + odd

简化:先加上每个数字出现的个数,如果是奇数,则减一,并且令odd=1

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: int
        """
        hashmap = collections.Counter(s)
        result = 0
        odd = 0
        for item in hashmap:
            result += hashmap[item]
            if hashmap[item] % 2 == 1:
                result -= 1
                odd = 1
        return result + odd

collections.Counter is a container that keeps track of how many times equivalent values are added.

例如:>>> # Tally occurrences of words in a list
    >>> cnt = Counter()
    >>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
    ...     cnt[word] += 1
    >>> cnt
    Counter({'blue': 3, 'red': 2, 'green': 1})

Last updated

Was this helpful?