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

题目说明

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

    有效的时间为 00:0023:59 之间的所有时间,包括 00:0023:59

    替换 time 中隐藏的数字,返回你可以得到的最晚有效时间。

  • 提示:

    • time 的格式为 hh:mm
    • 题目数据保证你可以由输入的字符串生成有效的时间

示例

示例 1:

1
2
3
输入:time = "2?:?0"
输出:"23:50"
解释:以数字 '2' 开头的最晚一小时是 23 ,以 '0' 结尾的最晚一分钟是 50 。

示例 2:

1
2
输入:time = "0?:3?"
输出:"09:39"

示例 3:

1
2
输入:time = "1?:22"
输出:"19:22"

笔者理解

此题是一道字符串算法问题,在力扣题库中被定义为简单题。

解法

当笔者阅读完此题后,发现本题直接求解,只需要注意小时的情况即可,让我们来看看具体如何实现的吧。

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
/*
* 字符串
*/
public String maximumTime(String time) {
char[] ch = time.toCharArray();
// 要注意小时第二位的情况,在第一位选择2时,要求第二位不大于3
if (ch[0] == '?') {
ch[0] = ch[1] != '?' && ch[1] - '0' > 3? '1': '2';
}
// 与第一位相对应
if (ch[1] == '?') {
ch[1] = ch[0] == '2'? '3': '9';
}
// 最大值固定
ch[3] = ch[3] == '?'? '5': ch[3];
ch[4] = ch[4] == '?'? '9': ch[4];
return new String(ch);
}
}

时间空间效率都还行,可见此解法还比较适合此题;

image-20210724095047406

总结

本题是今天的每日一题,难度是为简单,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。