1. 程式人生 > 實用技巧 >LeetCode #409. Longest Palindrome

LeetCode #409. Longest Palindrome

題目

409. Longest Palindrome


解題方法

先遍歷字串統計字元出現次數,然後遍歷字典。如果值是奇數,那就把它減一之後加到返回值中,如果值是偶數就直接加到返回值中。最後根據字典中是否有奇數值,看看返回值是否需要加1。這樣做的原因是構造迴文字串時一定要前後對稱,所以就把出現次數為偶數的全用上,把出現次數為奇數的能用多少用多少,然後最中間的一位再用一個出現次數為奇數的字元頂上去,這樣就是最長的迴文字串了。
時間複雜度:O(n)
空間複雜度:O(n)


程式碼

class Solution:
    def longestPalindrome(self, s: str) -> int:
        dic = collections.Counter(s)
        rat = 0
        hasodd = 0
        for key in dic.keys():
            if dic[key] % 2:
                hasodd = 1
                rat += dic[key] - 1
            else:
                rat += dic[key]
        rat += hasodd
        return rat