自己写的:
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
标签:count,字符,hash,even,leedcode,evenli,最长,回文 From: https://www.cnblogs.com/yyyjw/p/18156492