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;
}
};