跳转至

3986. 统计起止时间经过的秒数

题目描述

给你两个有效时间 startTimeendTime,它们均以字符串形式表示,格式为 "HH:MM:SS"

返回从 startTimeendTime 经过的秒数(包含两个端点)。

 

示例 1:

输入: startTime = "01:00:00", endTime = "01:00:25"

输出: 25

解释:

endTimestartTime 晚 25 秒。

示例 2:

输入: startTime = "12:34:56", endTime = "13:00:00"

输出: 1504

解释:

endTimestartTime 晚 25 分 4 秒,共计 1504 秒。

 

提示:

  • startTime.length == 8
  • endTime.length == 8
  • startTimeendTime 均为格式 "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)\)

1
2
3
4
5
6
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)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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));
    }
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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
}
1
2
3
4
5
6
7
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));
}

评论