题目
给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。
有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23:59 。
替换 time 中隐藏的数字,返回你可以得到的最晚有效时间。
思路
简答题,先判断当前位置需不需要修改,需要则进行修改!
以下说明情况都是对应位置为?时候的情况。
1、第一个位置,最大是2,但是这个位置受限于第二个位置,如果第二个位置不是4-9,那么第一个位置就可以改为2,否则只能改为1.
2、第二个位置,也受限于第一个位置,而且第一个位置在前面,优先级高于第二个位置(因为时间数值越大越晚,所以第一个位置的权重最大)。到了这里,第一个位置的数值一定确定了的。假设第一个位置是0或者1,那么就改为9,否则,改为3.【最大23】
3、第四个位置,分钟这一块不用考虑过多,如果需要就改为5,因为后面的数字无论是0-9中的哪一个,前面的数字不受限。
4、第五个位置,也不用考虑过多,如果需要就改为9.
代码
class Solution {
public String maximumTime(String time)
{
// 首字符需要替换
if (time.charAt(0)=='?')
{
// 第二个也是?
if (time.charAt(1)=='?')
{
time="23"+time.substring(2,5);
}
// 由于限制,第一个只能替换为1
else if (time.charAt(1)>='4')
{
time="1"+time.substring(1,5);
}
else
time="2"+time.substring(1,5);
}
// 第二个字符需要转换
if (time.charAt(1)=='?')
{
if (time.charAt(0)<='1')
time=time.charAt(0)+"9"+time.substring(2,5);
else
time=time.charAt(0)+"3"+time.substring(2,5);
}
// 第4个字符需要转换
if (time.charAt(3)=='?')
{
time=time.substring(0,3)+"5"+time.charAt(4);
}
// 第五个字符需要转换
if (time.charAt(4)=='?')
{
time=time.substring(0,4)+"9";
}
return time;
}
}
结果
的确很慢,每次都要去创建一个新的字符串对象,肯定很慢!不过为了A题,也就没有过多去考虑了!