跳至主要內容

1736. 替换隐藏数字得到的最晚时间


1736. 替换隐藏数字得到的最晚时间

🟢   🔖  贪心 字符串  🔗 力扣open in new window LeetCodeopen in new window

题目

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.

题目大意

给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。

有效的时间为 00:0023:59 之间的所有时间,包括 00:0023: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
  • 题目数据保证你可以由输入的字符串生成有效的时间

解题思路

  1. 最大化小时

    • 如果第一位是 '?'
      • 如果第二位是 '?' 或者小于 '4',设置为 '2'
      • 否则,设置为 '1'
    • 如果第二位是 '?'
      • 如果第一位是 '2',设置为 '3'
      • 否则,设置为 '9'
  2. 最大化分钟

    • 如果第三位是 '?',设置为 '5'
    • 如果第四位是 '?',设置为 '9'
  3. 直接返回结果

    • 遍历完成后,拼接字符串返回结果。

复杂度分析

  • 时间复杂度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有效时间的数目字符串 枚举🟢🀄️open in new window 🔗open in new window
3114替换字符可以得到的最晚时间字符串 枚举🟢🀄️open in new window 🔗open in new window