列表

详情


100256. 替换字符可以得到的最晚时间

给你一个字符串 s,表示一个 12 小时制的时间格式,其中一些数字(可能没有)被 "?" 替换。

12 小时制时间格式为 "HH:MM" ,其中 HH 的取值范围为 0011MM 的取值范围为 0059。最早的时间为 00:00,最晚的时间为 11:59

你需要将 s 中的 所有 "?" 字符替换为数字,使得结果字符串代表的时间是一个 有效 的 12 小时制时间,并且是可能的 最晚 时间。

返回结果字符串。

 

示例 1:

输入: s = "1?:?4"

输出: "11:54"

解释: 通过替换 "?" 字符,可以得到的最晚12小时制时间是 "11:54"

示例 2:

输入: s = "0?:5?"

输出: "09:59"

解释: 通过替换 "?" 字符,可以得到的最晚12小时制时间是 "09:59"

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: string findLatestTime(string s) { } };

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

上一题