解题思路:
- 本题要求仅仅需要返回最长的回文串长度即可,所以里面的顺序问题不需要考虑。从题目中可以发现,当某一个字母是偶数个数的时候一定可以作为最长回文串中的元素,但当某一个元素是奇数个数的时候,其中偶数个一定可以作为最长回文串中的元素,而且可以选择任意一个奇数个的元素作为中间值。
#include<unordered_map>
class Solution {
public:
int longestPalindrome(string s) {
//无序map实际上是C++11中添加的,类似于Hashmap采用散列表的形式进行存储
unordered_map<char,int>umap;
int res = 0;
for(char c : s){
//遍历重复自动加1
++umap[c];
}
for(auto p : umap){
//整除计算分布个数
res += p.second/2*2;
//只取任意一个奇数作为中间值
if(res % 2 == 0 && p.second % 2 ==1){
res += 1;
}
}
return res;
}
};