天天看點

每日算法-最長回文串

題目

給定一個包含大寫字母和小寫字母的字元串,找到通過這些字母構造成的最長的回文串。

在構造過程中,請注意區分大小寫。比如

"Aa"

不能當做一個回文字元串。

注意:

假設字元串的長度不會超過 1010。

示例 1:

輸入:
"abccccdd"

輸出:
7

解釋:
我們可以構造的最長的回文串是"dccaccd", 它的長度是 7。
           

解法

class Solution {
    public int longestPalindrome(String s) {
        int result = 0;
        if(s == null){
            return result;
        }
        // 把字元串的字元數量存進HashMap中
        Map<Character,Integer> map = new HashMap<>();
        char[] array = s.toCharArray();
        for(char c : array){
            map.put(c,map.getOrDefault(c,0)+1);
        }
        // 周遊HashMap
        for(Map.Entry<Character,Integer> entry : map.entrySet()){
            Character key = entry.getKey();
            Integer value = entry.getValue();
            // 如果value是偶數,直接加
            if(value % 2 == 0){
                result += value;
                continue;
            } 
            // value是奇數,隻需要把value-1加進去就行
          	result += value-1;
        }
        // 把特殊情況加進去:特殊情況是指中間是一個字母的情況
        if(result < array.length){
            result++;
        }
        return result;
    }
}
           

總結

本篇文章講解了算法題目的思路和解法,代碼和筆記由于純手打,難免會有纰漏,如果發現錯誤的地方,請第一時間告訴我,這将是我進步的一個很重要的環節。以後會定期更新算法題目以及各種開發知識點,如果您覺得寫得不錯,不妨點個關注,謝謝。