Skip to main content
Back to problems
#423
Medium Algorithms

Reconstruct original digits from english

Hash Table Math String
52.7% acceptance
Jan 13, 2026
892
2805
Given a string s containing an out-of-order English representation of digits 0-9, return the digits in ascending order.

Solution

Rust
Time O(n²)
Space O(1)
LeetCode
solution.rs
impl Solution {
  pub fn original_digits(s: String) -> String {
    let mut counts = [0; 26];
    for ch in s.bytes() {
      counts[(ch - b'a') as usize] += 1;
    }
    
    let mut digits = [0; 10];
    
    digits[0] = counts[(b'z' - b'a') as usize];
    digits[2] = counts[(b'w' - b'a') as usize];
    digits[4] = counts[(b'u' - b'a') as usize];
    digits[6] = counts[(b'x' - b'a') as usize];
    digits[8] = counts[(b'g' - b'a') as usize];
    
    digits[3] = counts[(b'h' - b'a') as usize] - digits[8];
    digits[5] = counts[(b'f' - b'a') as usize] - digits[4];
    digits[7] = counts[(b's' - b'a') as usize] - digits[6];
    
    digits[9] = counts[(b'i' - b'a') as usize] - digits[5] - digits[6] - digits[8];
    digits[1] = counts[(b'n' - b'a') as usize] - digits[7] - 2 * digits[9];
    
    let mut result = String::new();
    for i in 0..10 {
      for _ in 0..digits[i] {
        result.push((b'0' + i as u8) as char);
      }
    }
    
    result
  }
}