此题解通过直接检查输入字符串time中的每一位来构造可能的最晚时间。首先处理小时部分(前两位),然后处理分钟部分(后两位)。对于小时部分,首先检查第一位是否为'?',如果是,则根据第二位的值来决定第一位应该是'1'还是'2'。如果第二位也是'?',则直接设为'23'(因为这是可能的最大小时)。如果第二位不是'?',则根据其值是否大于3来决定第一位数字。对于分钟部分,如果第三或第四位是'?',则分别替换为可能的最大值'5'和'9'来得到最晚的时间。
时间复杂度: O(1)
空间复杂度: O(1)
class Solution:
def maximumTime(self, time: str) -> str:
ans = ""
# 处理小时的第一位
if time[0] == '?':
if time[1] == '?':
ans = "23" # 如果两位都是'?'
else:
if int(time[1]) > 3:
ans = "1" + time[1] # 第二位大于3,第一位只能是1
else:
ans = "2" + time[1] # 第二位不大于3,第一位可以设为2
elif time[1] == '?':
if int(time[0]) == 2:
ans = time[0] + "3" # 第一位是2,第二位最大只能是3
else:
ans = time[0] + "9" # 第一位是0或1,第二位可以是9
else:
ans = time[0] + time[1] # 如果两位都不是'?', 直接使用
ans += ":"
# 处理分钟的第一位
if time[3] == '?':
ans += "5" # 分钟的第一位,最大为5
else:
ans += time[3]
# 处理分钟的第二位
if time[4] == '?':
ans += "9" # 分钟的第二位,最大为9
else:
ans += time[4]
return ans