1. 程式人生 > 其它 >刷題-力扣-409. 最長迴文串

刷題-力扣-409. 最長迴文串

409. 最長迴文串

題目連結

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/longest-palindrome
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

題目描述

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

在構造過程中,請注意區分大小寫。比如"Aa"不能當做一個迴文字串。

注意:
假設字串的長度不會超過 1010。

示例 1:

輸入:
"abccccdd"

輸出:
7

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

題目分析

  1. 根據題目描述根據給定的字串s,判斷s可以組成的最長迴文串的長度
  2. 迴文串中包含的字母最多隻有一個字母出現奇數次,其餘字母均出現偶數次
  3. 先判斷字串s中各個字母出現的次數,在求取所有字母的最大偶數次的和

程式碼

class Solution {
public:
    int longestPalindrome(string s) {
        std::unordered_map<char, int> chrMap;
        int len = 0;
        int sLen = s.length();
        for (char c : s) { chrMap[c]++; }
        for (auto map : chrMap) {
            if (map.second % 2) { len += map.second - 1; }
            else { len += map.second; }
        }
        return len < sLen ? len + 1 : len;
    }
};