You are given a string num
consisting of digits only.
Return the largest palindromic integer (in the form of a string) that can be formed using digits taken from num
. It should not contain leading zeroes.
Notes:
- You do not need to use all the digits of
num
, but you must use at least one digit. - The digits can be reordered.
Input: num = "444947137" Output: "7449447" Explanation: Use the digits "4449477" from "444947137" to form the palindromic integer "7449447". It can be shown that "7449447" is the largest palindromic integer that can be formed.
Input: num = "00009" Output: "9" Explanation: It can be shown that "9" is the largest palindromic integer that can be formed. Note that the integer returned should not contain leading zeroes.
1 <= num.length <= 105
num
consists of digits.
impl Solution {
pub fn largest_palindromic(num: String) -> String {
let mut count = [0; 10];
let mut digits = vec![];
for digit in num.bytes() {
count[(digit - b'0') as usize] += 1;
}
for i in (0..=9).rev() {
while count[i] > 1 {
count[i] -= 2;
digits.push(i as u8 + b'0');
}
}
if *digits.get(0).unwrap_or(&b'1') == b'0' {
digits.clear();
}
let mut digits_rev = digits.clone();
digits_rev.reverse();
if let Some(i) = (0..=9).rev().find(|&i| count[i] > 0) {
digits.push(i as u8 + b'0');
}
digits.append(&mut digits_rev);
if digits.is_empty() {
digits.push(b'0');
}
String::from_utf8(digits).unwrap()
}
}