难度简单265
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
在构造过程中,请注意区分大小写。比如
"Aa"
不能当做一个回文字符串。注意:
假设字符串的长度不会超过 1010。示例 1:
输入: "abccccdd" 输出: 7 解释: 我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
这题的思路是这样的:
先用哈希map存储字符串中的字符和对应频数,然后对map中的频数进行计算,频数是偶数的可以直接分到回文串的两边,频数是奇数的可以作为中间的。
这里面有一个将频数count / 2 * 2 这样可以得到偶数的频数,直接分到两边,最后如果还剩下1的话,则放到中间。因此,count / 2 * 2 这样的方法很非常好的,学到了!!!
class Solution {
public:
int longestPalindrome(string s) {
unordered_map<char, int> ump;
for(char ch: s){
ump[ch]++;
}
int res = 0;
for(auto mp: ump){
int count = mp.second;
res += count / 2 * 2;
if(count % 2 == 1 && res % 2 == 0){
res++;
}
}
return res;
}
};