刷題-力扣-409. 最長迴文串
阿新 • • 發佈:2021-10-05
409. 最長迴文串
題目連結
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/longest-palindrome
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
題目描述
給定一個包含大寫字母和小寫字母的字串,找到通過這些字母構造成的最長的迴文串。
在構造過程中,請注意區分大小寫。比如"Aa"不能當做一個迴文字串。
注意:
假設字串的長度不會超過 1010。
示例 1:
輸入:
"abccccdd"
輸出:
7
解釋:
我們可以構造的最長的迴文串是"dccaccd", 它的長度是 7。
題目分析
- 根據題目描述根據給定的字串s,判斷s可以組成的最長迴文串的長度
- 迴文串中包含的字母最多隻有一個字母出現奇數次,其餘字母均出現偶數次
- 先判斷字串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; } };