leedcode-最長迴文串

Junior_bond發表於2024-04-24

自己寫的:

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

相關文章