LeetCode #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