题目
给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。
有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和 23: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
题目数据保证你可以由输入的字符串生成有效的时间
解题思路与算法
- 字符串“00:00” 的4个0分别看做x1,x2,x3,x4
- 如果x3未知,x3最大为5;如果x4未知,x4最大为9
- x1,x2有三种情况:
- x1,x2未知: x1最大为2,x2最大为3
- x1未知: 如果x2大于3,那x1最大为1。因为没有24,25,,,,这样的小时,最大为23,最大具体时间为23:59;如果x2小于等于3,那么x1最大为2
- x2未知: 如果x1为2,x2最大只能为3;如果x1小于2,那么x2最大可以为9
代码
class Solution {
public String maximumTime(String time) {
char[] ch = time.toCharArray();
String x1=String.valueOf(ch[0]);
String x2=String.valueOf(ch[1]);
String x3=String.valueOf(ch[3]);
String x4=String.valueOf(ch[4]);
if(x1.equals("?") && x2.equals("?") ) {
ch[0]='2';
ch[1]='3';
}else if (x1.equals("?")) {
if((int)ch[1]-(int)('0')>3) {
ch[0]='1';
}else {
ch[0]='2';
}
}else if (x2.equals("?")) {
if((int)ch[0]-(int)('0')==2) {
ch[1]='3';
}else {
ch[1]='9';
}
}
if(x3.equals("?")) {
ch[3]='5';
}
if(x4.equals("?")) {
ch[4]='9';
}
return String.valueOf(ch);
}
}