本题要求:找到可构成回文数的最大个数res
本题实可以这么做:找出字符串中字母的个数
1.如果该字母能被2整除,那么说明可以构成回文,加到res去;
2.如果该字母不能被2整除,但大于1,比如3,那么可以减1,然后剩下的个数可以构成回文数,加到res去。
3.遍历完再判断一下,如果res小于字符串的个数,说明可以随便拿一个数放中间,这样回文字符串就是奇数了,那么把这个数加到res去。
int longestPalindrome(string s) {
map<char, int> mymap;
int res = 0;
for(int i = 0 ; i < s.size(); i++)
{
mymap[s[i]] ++ ;
}
map<char,int>::iterator iter;
for(iter = mymap.begin(); iter != mymap.end(); iter ++)
{
//偶数情况
if(iter->second % 2 == 0)
{
res+= iter->second;
}
//奇数情况
if(iter->second % 2 != 0 && iter->second != 1)
{
res+=(iter->second - 1);
}
}
return res < s.size() ? (res + 1) : res;
}
其中中间部分if也可以这么写:
(iter->second % 2 == 0 && iter->second !=1) ? res+=iter->second : res+=(iter->second - 1);
知识点:
map的遍历
map<char,int>::iterator iter;
for(iter = mymap.begin(); iter != mymap.end(); iter ++)
{
...
}