LeetCode #409. Longest Palindrome
阿新 • • 發佈:2020-12-08
題目
解題方法
先遍歷字串統計字元出現次數,然後遍歷字典。如果值是奇數,那就把它減一之後加到返回值中,如果值是偶數就直接加到返回值中。最後根據字典中是否有奇數值,看看返回值是否需要加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