本题要求:找到可构成回文数的最大个数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 ++)
{
...
}
本文详细解析了如何通过遍历字符计数并利用回文特性,寻找字符串中可构成回文数的最大个数。重点介绍了使用map数据结构进行字符频率统计的方法,并通过条件判断实现了对奇数和偶数个数字符的有效处理。

754

被折叠的 条评论
为什么被折叠?



