1736. Latest Time by Replacing Hidden Digits

You are given a string time in the form of hh:mm, where some of the digits in the string are hidden (represented by ?).

The valid times are those inclusively between 00:00 and 23:59.

Return the latest valid time you can get from time by replacing the hidden digits.

 

Example 1:

Input: time = "2?:?0"
Output: "23:50"
Explanation: The latest hour beginning with the digit '2' is 23 and the latest minute ending with the digit '0' is 50.

Example 2:

Input: time = "0?:3?"
Output: "09:39"

Example 3:

Input: time = "1?:22"
Output: "19:22"

 

Constraints:

  • time is in the format hh:mm.
  • It is guaranteed that you can produce a valid time from the given string.

Rust Solution

struct Solution;

impl Solution {
    fn maximum_time(time: String) -> String {
        let time: Vec<char> = time.chars().collect();
        let mut max = 0;
        for i in 0..24 {
            'outer: for j in 0..60 {
                let t = i * 60 + j;
                let s = format!("{:02}:{:02}", i, j);
                let s: Vec<char> = s.chars().collect();
                for i in 0..5 {
                    if time[i] != '?' && time[i] != s[i] {
                        continue 'outer;
                    }
                }
                max = max.max(t);
            }
        }
        format!("{:02}:{:02}", max / 60, max % 60)
    }
}

#[test]
fn test() {
    let time = "2?:?0".to_string();
    let res = "23:50".to_string();
    assert_eq!(Solution::maximum_time(time), res);
    let time = "0?:3?".to_string();
    let res = "09:39".to_string();
    assert_eq!(Solution::maximum_time(time), res);
    let time = "1?:22".to_string();
    let res = "19:22".to_string();
    assert_eq!(Solution::maximum_time(time), res);
}

Having problems with this solution? Click here to submit an issue on github.