[LeetCode] 409、最長迴文串

題目描述

給定一個包含大寫字母和小寫字母的字符串,找到通過這些字母構造成的最長的迴文串。在構造過程中,請注意區分大小寫。比如 "Aa" 不能當做一個迴文字符串。

輸入: "abccccdd"
輸出: 7
解釋: 我們可以構造的最長的迴文串是"dccaccd", 它的長度是 7。

解題思路

迴文子串問題一般是用“動態規劃”或者“中心拓展法”解決,但是這個題有點區別:本題不需要考慮原來字符串中字符的順序,僅需要找到通過這些字符構造成的最長的迴文串長度。所以本題應該考慮統計各個字符出現的次數,用“哈希表”解決。

參考代碼

class Solution {
public:
    int longestPalindrome(string str) {
        unordered_map<char, int> umap;
        for(auto &c: str){
            umap[c]++;
        }
        
        int res = 0;
        bool flag = false;
        for(auto &elem: umap){
            res += (elem.second / 2 * 2);
            if(elem.second & 1)  // 有奇數個數的字符時,需要特殊處理一下
                flag = true;
        }
        
        return flag? res + 1: res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章