自己寫的:
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