每日一题力扣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
标签:偶数,字母,value,力扣,result,key,一题,409,回文 来源: https://www.cnblogs.com/liuxiangyan/p/14606930.html