3114. 替换字符可以得到的最晚时间
题目描述
给你一个字符串 s
,表示一个 12 小时制的时间格式,其中一些数字(可能没有)被 "?"
替换。
12 小时制时间格式为 "HH:MM"
,其中 HH
的取值范围为 00
至 11
,MM
的取值范围为 00
至 59
。最早的时间为 00:00
,最晚的时间为 11:59
。
你需要将 s
中的 所有 "?"
字符替换为数字,使得结果字符串代表的时间是一个 有效 的 12 小时制时间,并且是可能的 最晚 时间。
返回结果字符串。
示例 1:
输入: s = "1?:?4"
输出: "11:54"
解释: 通过替换 "?"
字符,可以得到的最晚12小时制时间是 "11:54"
。
示例 2:
输入: s = "0?:5?"
输出: "09:59"
解释: 通过替换 "?"
字符,可以得到的最晚12小时制时间是 "09:59"
。
提示:
s.length == 5
s[2]
是字符":"
- 除
s[2]
外,其他字符都是数字或"?"
- 输入保证在替换
"?"
字符后至少存在一个介于"00:00"
和"11:59"
之间的时间。
解法
方法一:枚举
我们可以从大到小枚举所有的时间,其中小时 $h$ 从 $11$ 到 $0$,分钟 $m$ 从 $59$ 到 $0$。对于每一个时间 $t$,我们检查是否满足 $t$ 的每一位字符都与 $s$ 的对应位置字符相等(如果 $s$ 的对应位置字符不是 "?" 的话)。如果满足,那么我们就找到了答案,返回 $t$。
时间复杂度 $O(h \times m)$,其中 $h = 12$, $m = 60$。空间复杂度 $O(1)$。
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
方法二:逐个判断
我们可以逐个判断 $s$ 的每一位字符,如果是 "?" 的话,我们就根据前后的字符来确定这一位字符的值。具体地,我们有以下规则:
- 如果 $s[0]$ 是 "?",那么 $s[0]$ 的值应该是 "1" 或 "0",具体取决于 $s[1]$ 的值。如果 $s[1]$ 是 "?" 或者 $s[1]$ 小于 "2",那么 $s[0]$ 的值应该是 "1",否则 $s[0]$ 的值应该是 "0"。
- 如果 $s[1]$ 是 "?",那么 $s[1]$ 的值应该是 "1" 或 "9",具体取决于 $s[0]$ 的值。如果 $s[0]$ 是 "1",那么 $s[1]$ 的值应该是 "1",否则 $s[1]$ 的值应该是 "9"。
- 如果 $s[3]$ 是 "?",那么 $s[3]$ 的值应该是 "5"。
- 如果 $s[4]$ 是 "?",那么 $s[4]$ 的值应该是 "9"。
时间复杂度 $O(1)$,空间复杂度 $O(1)$。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|