题目地址:
https://www.lintcode.com/problem/maximum-moment/description
给定一个 24 24 24小时制时间( 00 : 00 ∼ 23 : 59 00:00\sim 23:59 00:00∼23:59),以字符串形式 s s s给出,其中有若干位是问号,问其能代表的最大时间是多少。以字符串形式返回。
分类讨论即可。如果问号出现在 s [ 0 ] s[0] s[0],那么看一下 s [ 1 ] s[1] s[1],如果 s [ 1 ] ∈ { 0 , 1 , 2 , 3 } s[1]\in \{0,1,2,3\} s[1]∈{0,1,2,3}或者是问号,那么显然 s [ 0 ] s[0] s[0]应该取 2 2 2,否则就取 1 1 1;如果问号出现在 s [ 1 ] s[1] s[1],那么就看一下 s [ 0 ] s[0] s[0],如果 s [ 0 ] = 1 s[0]=1 s[0]=1那么 s [ 1 ] s[1] s[1]取 9 9 9,否则取 3 3 3;接下来,如果问号出现在 s [ 3 ] s[3] s[3]则 s [ 3 ] s[3] s[3]取 5 5 5,如果问号出现在 s [ 4 ] s[4] s[4]则 s [ 4 ] s[4] s[4]取 9 9 9。代码如下:
public class Solution {
/**
* @param time: a string of Time
* @return: The MaximumMoment
*/
public String MaximumMoment(String time) {
// write your code here
char[] chars = time.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] == '?') {
if (i == 0) {
chars[0] = chars[1] == '?' || chars[1] <= '3' ? '2' : '1';
} else if (i == 1) {
chars[1] = chars[0] == '2' ? '3' : '9';
} else if (i == 3) {
chars[3] = '5';
} else if (i == 4) {
chars[4] = '9';
}
}
}
return new String(chars);
}
}
时空复杂度 O ( 1 ) O(1) O(1)。