100256. 替换字符可以得到的最晚时间
给你一个字符串 s
,表示一个 12 小时制的时间格式,其中一些数字(可能没有)被 "?"
替换。
12 小时制时间格式为 "HH:MM"
,其中 HH
的取值范围为 00
至 11
,MM
的取值范围为 00
至 59
。最早的时间为 00:00
,最晚的时间为 11:59
。
你需要将 s
中的 所有 "?"
字符替换为数字,使得结果字符串代表的时间是一个 有效 的 12 小时制时间,并且是可能的 最晚 时间。
返回结果字符串。
示例 1:
输入: s = "1?:?4"
输出: "11:54"
解释: 通过替换 "?"
字符,可以得到的最晚12小时制时间是 "11:54"
。
示例 2:
输入: s = "0?:5?"
输出: "09:59"
解释: 通过替换 "?"
字符,可以得到的最晚12小时制时间是 "09:59"
。
提示:
s.length == 5
s[2]
是字符 ":"
s[2]
外,其他字符都是数字或 "?"
"?"
字符后至少存在一个介于 "00:00"
和 "11:59"
之间的时间。原站题解
python3 解法, 执行用时: 46 ms, 内存消耗: 16.3 MB, 提交时间: 2024-04-15 00:14:01
class Solution: def findLatestTime(self, s: str) -> str: t = [s[0], s[1], ':', '5', '9'] if s[0] == '?': t[0] = '0' if (s[1] != '?' and int(s[1]) > 1) else '1' if s[3] != '?': t[3] = s[3] if s[4] != '?': t[4] = s[4] if s[1] == '?': t[1] = '1' if t[0] == '1' else '9' return ''.join(t)
golang 解法, 执行用时: 4 ms, 内存消耗: 2.2 MB, 提交时间: 2024-04-14 23:57:32
func findLatestTime(s string) string { for h := 11; ; h-- { if s[0] != '?' && s[0]-'0' != byte(h/10) || s[1] != '?' && s[1]-'0' != byte(h%10) { continue } for m := 59; m >= 0; m-- { if s[3] != '?' && s[3]-'0' != byte(m/10) || s[4] != '?' && s[4]-'0' != byte(m%10) { continue } return fmt.Sprintf("%02d:%02d", h, m) } } }
cpp 解法, 执行用时: 0 ms, 内存消耗: 7.7 MB, 提交时间: 2024-04-14 23:57:08
class Solution { public: string findLatestTime(string s) { for (int h = 11; ; h--) { if (s[0] != '?' && s[0] - '0' != h / 10 || s[1] != '?' && s[1] - '0' != h % 10) { continue; } for (int m = 59; m >= 0; m--) { if (s[3] != '?' && s[3] - '0' != m / 10 || s[4] != '?' && s[4] - '0' != m % 10) { continue; } char ans[6]; sprintf(ans, "%02d:%02d", h, m); return string(ans); } } } };
java 解法, 执行用时: 11 ms, 内存消耗: 42.6 MB, 提交时间: 2024-04-14 23:56:53
class Solution { public String findLatestTime(String S) { char[] s = S.toCharArray(); for (int h = 11; ; h--) { if (s[0] != '?' && s[0] - '0' != h / 10 || s[1] != '?' && s[1] - '0' != h % 10) { continue; } for (int m = 59; m >= 0; m--) { if (s[3] != '?' && s[3] - '0' != m / 10 || s[4] != '?' && s[4] - '0' != m % 10) { continue; } return String.format("%02d:%02d", h, m); } } } }
python3 解法, 执行用时: 226 ms, 内存消耗: 16.3 MB, 提交时间: 2024-04-14 23:56:34
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}" # f-string if all(x == '?' or x == y for x, y in zip(s, t)): return t