题目描述
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如 "Aa"
不能当做一个回文字符串。
注意:
假设字符串的长度不会超过 1010。
示例 1:
输入: "abccccdd" 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
问题分析
先统计字符串中每个字符的个数,存入哈希表。然后个数为偶数的字符都要,个数为奇数的字符要减1后的偶数个,出现有奇数的之后flag置1。把所有的都统计完成后,加上flag得到答案。
代码实现
class Solution {
public:
int longestPalindrome(string s) {
int res = 0;
int flag = 0;
unordered_map<char, int> umap;
for(char c : s)
umap[c]++;
for(auto iter = umap.begin(); iter != umap.end(); iter++){
if(iter->second % 2 == 0)
res += iter->second;
else{
res += iter->second - 1;
flag = 1;
}
}
return res + flag;
}
};