LeetCode #409. Longest Palindrome

题目

409. Longest Palindrome


解题方法

先遍历字符串统计字符出现次数,然后遍历字典。如果值是奇数,那就把它减一之后加到返回值中,如果值是偶数就直接加到返回值中。最后根据字典中是否有奇数值,看看返回值是否需要加1。这样做的原因是构造回文字符串时一定要前后对称,所以就把出现次数为偶数的全用上,把出现次数为奇数的能用多少用多少,然后最中间的一位再用一个出现次数为奇数的字符顶上去,这样就是最长的回文字符串了。
时间复杂度:O(n)
空间复杂度:O(n)


代码

class Solution:
    def longestPalindrome(self, s: str) -> int:
        dic = collections.Counter(s)
        rat = 0
        hasodd = 0
        for key in dic.keys():
            if dic[key] % 2:
                hasodd = 1
                rat += dic[key] - 1
            else:
                rat += dic[key]
        rat += hasodd
        return rat
posted @ 2020-12-08 10:02  老鼠司令  阅读(48)  评论(0编辑  收藏  举报