本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

问题描述

你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。替换 time 中隐藏的数字,返回你可以得到的最晚有效时间。

输入:time = 2?:?0”

输出:”23:50

解决方案

按照顺序逐位判断

对于小时的第一位如果为?,则有两种不同的情况:

小时的第二位在几种情况中 ('0','1','2','3',) ,则小时第一位取2

小时的第二位不在几种情况中,则小时的第一位只能取 1

对于小时的第二位如果为 ? 也有两不同的情况:

小时的第一位在此情况中('0','1'),则小时的第二位取9为最晚时间

若小时的第一位为2,则此时小时的第二位取3为最晚时间

对于分钟的二位如果为??,则第一位取5第二位取9

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

class  Solution:                   

     def maximumTime(self, time: str) -> str:

         time = list(time)

         if time[0] == '?':

            time[0] = '2' if time[1] in  ('0','1','2','3','?') else '1'

         if time[1] == '?':

            time[1] = '9' if time[0] in  ('0','1') else '3'

         if time[3] == '?': time[3] = '5'

         if time[4] == '?': time[4] = '9'

         return "".join(time)

 

结语

通过讨论有几种情况来完成这道题,因为此题可能出现的种类不多,便可以只用这种方法,若出现情况较多的题目,这种方法便不可行,需要一种更简便更直接的方法解决此类题。

实习编辑:王晓姣

作者:查萌雨、赵柔、岳进

稿件来源:深度学习与文旅应用实验室(DLETA)