leetcode409:最长回文数

本题要求:找到可构成回文数的最大个数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 ++)
    {
    ...
    }
发布了51 篇原创文章 · 获赞 52 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/Hanghang_/article/details/104959424