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;
}
};