【力扣算法python】---409.最长回文串

题目
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。

示例 1:
输入:
“abccccdd”
输出:
7

解释:
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
题目链接:https://leetcode-cn.com/problems/longest-palindrome/
思路:
如果是偶数的回文串,它里面的各个字符个数都应该是偶数,而奇数的回文串,除了最中间的那个字符,其余的字符也应该都是偶数。
我们就可以迭代一遍字符串,计算出其中每个字符的个数,然后将每个字符的最大偶数个加到total上,之后在找到一个数量剩下1的字符,total加一,没有的话就不用加了。
最后找这个数量为1的字符,相当于让这个字符充当奇数回文串的中间位置
上代码:

class Solution:
    def longestPalindrome(self, s: str) -> int:
        add = {}
        total = 0
        for i in range(len(s)):#计算字符个数
            if s[i] not in add.keys():
                add[s[i]] = 0
            add[s[i]] += 1
        for key in add.keys():#计算回文串有多少个偶数
            if(add[key]%2 ==0):
                total += add[key]
                add[key] = 0
            else:
                num = int(add[key]/2) * 2
                add[key] -= num
                total += num
        for key in add.keys():#是否有中间位
            if(add[key]==1):
                total += 1
                break
        return total

你可能感兴趣的:(算法)