1736. 替换隐藏数字得到的最晚时间
1736. 替换隐藏数字得到的最晚时间
题目
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 formathh:mm
.- It is guaranteed that you can produce a valid time from the given string.
题目大意
给你一个字符串 time
,格式为 hh:mm
(小时:分钟),其中某几位数字被隐藏(用 ?
表示)。
有效的时间为 00:00
到 23:59
之间的所有时间,包括 00:00
和 23:59
。
替换 time
中隐藏的数字,返回你可以得到的最晚有效时间。
示例 1:
输入: time = "2?:?0"
输出: "23:50"
解释: 以数字 '2' 开头的最晚一小时是 23 ,以 '0' 结尾的最晚一分钟是 50 。
示例 2:
输入: time = "0?:3?"
输出: "09:39"
示例 3:
输入: time = "1?:22"
输出: "19:22"
提示:
time
的格式为hh:mm
- 题目数据保证你可以由输入的字符串生成有效的时间
解题思路
最大化小时:
- 如果第一位是
'?'
:- 如果第二位是
'?'
或者小于'4'
,设置为'2'
。 - 否则,设置为
'1'
。
- 如果第二位是
- 如果第二位是
'?'
:- 如果第一位是
'2'
,设置为'3'
。 - 否则,设置为
'9'
。
- 如果第一位是
- 如果第一位是
最大化分钟:
- 如果第三位是
'?'
,设置为'5'
。 - 如果第四位是
'?'
,设置为'9'
。
- 如果第三位是
直接返回结果:
- 遍历完成后,拼接字符串返回结果。
复杂度分析
- 时间复杂度:
O(1)
,因为时间字符串固定长度为 5,最多检查 5 个字符。 - 空间复杂度:
O(1)
,只使用了常数额外空间。
代码
/**
* @param {string} time
* @return {string}
*/
var maximumTime = function (time) {
let chars = time.split('');
if (chars[0] === '?')
chars[0] = chars[1] === '?' || chars[1] < '4' ? '2' : '1';
if (chars[1] === '?') chars[1] = chars[0] === '2' ? '3' : '9';
if (chars[3] === '?') chars[3] = '5';
if (chars[4] === '?') chars[4] = '9';
return chars.join('');
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
2437 | 有效时间的数目 | 字符串 枚举 | 🟢 | 🀄️ 🔗 | |
3114 | 替换字符可以得到的最晚时间 | 字符串 枚举 | 🟢 | 🀄️ 🔗 |