每日一题力扣409

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

就是出现双数数量的字符肯定能够组成回文的部分。就存下来这些数量;然后对于奇数个的要其中最大的偶数个。再留下一个原奇数个的字符,真是太神奇了。

class Solution:
    def longestPalindrome(self, s: str) -> int:
        l_s = list(s)
        #字典来存储每个字母出现的个数
        m = {}
        for word in l_s:
            m[word]= m.get(word,0)+1#如果有这个的话,就加一,没有的话就新增key再赋值为0
        
        result = 0
        for key, value in m.items():
            #如果出现个数为偶数,直接加入.偶数肯定可以做回文
            if value % 2 == 0:
                result += value
            else:
                #如果为奇数,则加value - 1,并且,该字母的次数变为1
                result += value - 1#,变成偶数加入回文串
                m[key] = 1 #关键行,处理例如:"aaabb"-转化为->"ababa"
        #如果遍历完成的字符串中还有,出现值为1的字母,那么结果长度还要加1才行,因为可以把这个单个字母放在中间,使长度再增加1
        return  result + 1 if 1 in m.values() else result
原文地址:https://www.cnblogs.com/liuxiangyan/p/14606930.html