leedcode-最长回文串

自己写的:

class Solution:
    def longestPalindrome(self, s: str) -> int:
        count = 0  # 用于计算最长回文串的长度
        hash = {}  # 用于统计每个字符出现的次数的字典
        # 统计每个字符出现的次数
        for i in s:
            if not hash.get(i):
                hash[i] = 1
            else:
                hash[i] += 1
        
        oddli = []  # 存储出现奇数次的字符的列表
        evenli = []  # 存储出现偶数次的字符的列表
        
        # 将出现奇数次和偶数次的字符分别存储到对应的列表中
        for k, v in hash.items():
            if v % 2 == 0:
                evenli.append(v)
            else:
                oddli.append(v)
        
        oddlen = len(oddli)  # 计算出现奇数次的字符的个数
        
        # 如果没有出现奇数次的字符,则所有字符都可以用于构成回文串,直接返回字符串长度
        if oddlen == 0:
            for even in evenli:
                count += even
            return count
        # 如果只有一个出现奇数次的字符,则这个字符可以放在回文串的中间,其余字符都是偶数次出现,直接返回计算长度
        elif oddlen == 1:
            for even in evenli:
                count += even
            count += oddli[0]
            return count
        # 如果有多个出现奇数次的字符,则将其中偶数个字符的数量-1加入回文串,最后再加一个出现奇数次的字符作为中心
        else:
            for even in evenli:
                count += even
            for odd in oddli:
                count += odd - 1
            return count + 1

 

posted @ 2024-04-24 22:06  Junior_bond  阅读(9)  评论(0)    收藏  举报