力扣 : 2384. 最大回文数字

2384. 最大回文数字 - 力扣(LeetCode)

思路:贪心,先放最大的数 , _ _ _ _ 越大的数在前,最后的回文数就越大   (注意0不能当前缀,也就是说当一个数都没有时,不能放0)

注意: 回文数两边相同,但当回文数有奇数位时,中间的数可以为任意数,所以我们让他最大化(如果有个数有奇数个,且最大,中间就放最大的那个数)

class Solution {
public:

    string largestPalindromic(string num) {
        map<char,int,greater<char> > hash;

        for(int i=0;i<num.size();i++)
        {
            hash[num[i]]++;
        }

        string ans,mid; //记录前半答案  和 中间值
        bool flag=false;//代表中间找到没
        for(auto& [k,v]:hash)
        {
            if((v&1) && !flag)
            {
                mid = k;
                flag=true;
            }
            if(k == '0' && ans.empty())continue;  //防止出现0前缀
            for(int i=0;i<v/2;i++)
            {
                ans+=k;
            }
        }

        if(ans.empty() && mid.empty())return "0";  //全是0 

        string k = ans;
        reverse(ans.begin(),ans.end());
        if(flag)k+=mid;
        k+=ans;

        return k;

    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值