
题目描述
给你两个有效时间 startTime 和 endTime,它们均以字符串形式表示,格式为 "HH:MM:SS"。
返回从 startTime 到 endTime 经过的秒数(包含两个端点)。
示例 1:
输入: startTime = "01:00:00", endTime = "01:00:25"
输出: 25
解释:
endTime 比 startTime 晚 25 秒。
示例 2:
输入: startTime = "12:34:56", endTime = "13:00:00"
输出: 1504
解释:
endTime 比 startTime 晚 25 分 4 秒,共计 1504 秒。
提示:
startTime.length == 8 endTime.length == 8 startTime 和 endTime 均为格式 "HH:MM:SS" 的有效时间 00 <= HH <= 23 00 <= MM <= 59 00 <= SS <= 59 endTime 不早于 startTime
解法
方法一:模拟
将时间字符串转换为从 \(00\):\(00\):\(00\) 起经过的秒数,即 \(HH \times 3600 + MM \times 60 + SS\),再计算两个时间对应秒数之差即可。
时间复杂度 \(O(1)\),空间复杂度 \(O(1)\)。
| class Solution:
def secondsBetweenTimes(self, startTime: str, endTime: str) -> int:
def f(s: str) -> int:
return int(s[:2]) * 3600 + int(s[3:5]) * 60 + int(s[6:])
return f(endTime) - f(startTime)
|
| class Solution {
public int secondsBetweenTimes(String startTime, String endTime) {
return f(endTime) - f(startTime);
}
private int f(String s) {
return Integer.parseInt(s.substring(0, 2)) * 3600 + Integer.parseInt(s.substring(3, 5)) * 60
+ Integer.parseInt(s.substring(6));
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13 | class Solution {
public:
int secondsBetweenTimes(string startTime, string endTime) {
return f(endTime) - f(startTime);
}
private:
int f(const string& s) {
return stoi(s.substr(0, 2)) * 3600
+ stoi(s.substr(3, 2)) * 60
+ stoi(s.substr(6));
}
};
|
| func secondsBetweenTimes(startTime string, endTime string) int {
return f(endTime) - f(startTime)
}
func f(s string) int {
h, _ := strconv.Atoi(s[:2])
m, _ := strconv.Atoi(s[3:5])
sec, _ := strconv.Atoi(s[6:])
return h*3600 + m*60 + sec
}
|
| function secondsBetweenTimes(startTime: string, endTime: string): number {
return f(endTime) - f(startTime);
}
function f(s: string): number {
return parseInt(s.slice(0, 2)) * 3600 + parseInt(s.slice(3, 5)) * 60 + parseInt(s.slice(6));
}
|