comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
Easy |
1290 |
Weekly Contest 393 Q1 |
|
You are given a string s
representing a 12-hour format time where some of the digits (possibly none) are replaced with a "?"
.
12-hour times are formatted as "HH:MM"
, where HH
is between 00
and 11
, and MM
is between 00
and 59
. The earliest 12-hour time is 00:00
, and the latest is 11:59
.
You have to replace all the "?"
characters in s
with digits such that the time we obtain by the resulting string is a valid 12-hour format time and is the latest possible.
Return the resulting string.
Example 1:
Input: s = "1?:?4"
Output: "11:54"
Explanation: The latest 12-hour format time we can achieve by replacing "?"
characters is "11:54"
.
Example 2:
Input: s = "0?:5?"
Output: "09:59"
Explanation: The latest 12-hour format time we can achieve by replacing "?"
characters is "09:59"
.
Constraints:
s.length == 5
s[2]
is equal to the character":"
.- All characters except
s[2]
are digits or"?"
characters. - The input is generated such that there is at least one time between
"00:00"
and"11:59"
that you can obtain after replacing the"?"
characters.
We can enumerate all times from large to small, where the hour
The time complexity is
class Solution:
def findLatestTime(self, s: str) -> str:
for h in range(11, -1, -1):
for m in range(59, -1, -1):
t = f"{h:02d}:{m:02d}"
if all(a == b for a, b in zip(s, t) if a != "?"):
return t
class Solution {
public String findLatestTime(String s) {
for (int h = 11;; h--) {
for (int m = 59; m >= 0; m--) {
String t = String.format("%02d:%02d", h, m);
boolean ok = true;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != '?' && s.charAt(i) != t.charAt(i)) {
ok = false;
break;
}
}
if (ok) {
return t;
}
}
}
}
}
class Solution {
public:
string findLatestTime(string s) {
for (int h = 11;; h--) {
for (int m = 59; m >= 0; m--) {
char t[6];
sprintf(t, "%02d:%02d", h, m);
bool ok = true;
for (int i = 0; i < s.length(); i++) {
if (s[i] != '?' && s[i] != t[i]) {
ok = false;
break;
}
}
if (ok) {
return t;
}
}
}
}
};
func findLatestTime(s string) string {
for h := 11; ; h-- {
for m := 59; m >= 0; m-- {
t := fmt.Sprintf("%02d:%02d", h, m)
ok := true
for i := 0; i < len(s); i++ {
if s[i] != '?' && s[i] != t[i] {
ok = false
break
}
}
if ok {
return t
}
}
}
}
function findLatestTime(s: string): string {
for (let h = 11; ; h--) {
for (let m = 59; m >= 0; m--) {
const t: string = `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}`;
let ok: boolean = true;
for (let i = 0; i < s.length; i++) {
if (s[i] !== '?' && s[i] !== t[i]) {
ok = false;
break;
}
}
if (ok) {
return t;
}
}
}
}
We can judge each digit of
- If
$s[0]$ is "?", then the value of$s[0]$ should be "1" or "0", depending on the value of$s[1]$ . If$s[1]$ is "?" or$s[1]$ is less than "2", then the value of$s[0]$ should be "1", otherwise the value of$s[0]$ should be "0". - If
$s[1]$ is "?", then the value of$s[1]$ should be "1" or "9", depending on the value of$s[0]$ . If$s[0]$ is "1", then the value of$s[1]$ should be "1", otherwise the value of$s[1]$ should be "9". - If
$s[3]$ is "?", then the value of$s[3]$ should be "5". - If
$s[4]$ is "?", then the value of$s[4]$ should be "9".
The time complexity is
class Solution:
def findLatestTime(self, s: str) -> str:
s = list(s)
if s[0] == "?":
s[0] = "1" if s[1] == "?" or s[1] < "2" else "0"
if s[1] == "?":
s[1] = "1" if s[0] == "1" else "9"
if s[3] == "?":
s[3] = "5"
if s[4] == "?":
s[4] = "9"
return "".join(s)
class Solution {
public String findLatestTime(String s) {
char[] cs = s.toCharArray();
if (cs[0] == '?') {
cs[0] = cs[1] == '?' || cs[1] < '2' ? '1' : '0';
}
if (cs[1] == '?') {
cs[1] = cs[0] == '1' ? '1' : '9';
}
if (cs[3] == '?') {
cs[3] = '5';
}
if (cs[4] == '?') {
cs[4] = '9';
}
return new String(cs);
}
}
class Solution {
public:
string findLatestTime(string s) {
if (s[0] == '?') {
s[0] = s[1] == '?' || s[1] < '2' ? '1' : '0';
}
if (s[1] == '?') {
s[1] = s[0] == '1' ? '1' : '9';
}
if (s[3] == '?') {
s[3] = '5';
}
if (s[4] == '?') {
s[4] = '9';
}
return s;
}
};
func findLatestTime(s string) string {
cs := []byte(s)
if cs[0] == '?' {
if cs[1] == '?' || cs[1] < '2' {
cs[0] = '1'
} else {
cs[0] = '0'
}
}
if cs[1] == '?' {
if cs[0] == '1' {
cs[1] = '1'
} else {
cs[1] = '9'
}
}
if cs[3] == '?' {
cs[3] = '5'
}
if cs[4] == '?' {
cs[4] = '9'
}
return string(cs)
}
function findLatestTime(s: string): string {
const cs = s.split('');
if (cs[0] === '?') {
cs[0] = cs[1] === '?' || cs[1] < '2' ? '1' : '0';
}
if (cs[1] === '?') {
cs[1] = cs[0] === '1' ? '1' : '9';
}
if (cs[3] === '?') {
cs[3] = '5';
}
if (cs[4] === '?') {
cs[4] = '9';
}
return cs.join('');
}