551. 学生出勤记录 I
551. 学生出勤记录 I
题目
You are given a string s
representing an attendance record for a student where each character signifies whether the student was absent, late, or present on that day. The record only contains the following three characters:
'A'
: Absent.'L'
: Late.'P'
: Present.
The student is eligible for an attendance award if they meet both of the following criteria:
- The student was absent (
'A'
) for strictly fewer than 2 days total. - The student was never late (
'L'
) for 3 or more consecutive days.
Return true
if the student is eligible for an attendance award, orfalse
otherwise.
Example 1:
Input: s = "PPALLP"
Output: true
Explanation: The student has fewer than 2 absences and was never late 3 or more consecutive days.
Example 2:
Input: s = "PPALLL"
Output: false
Explanation: The student was late 3 consecutive days in the last 3 days, so is not eligible for the award.
Constraints:
1 <= s.length <= 1000
s[i]
is either'A'
,'L'
, or'P'
.
题目大意
给你一个字符串 s
表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:
'A'
:Absent,缺勤'L'
:Late,迟到'P'
:Present,到场
如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:
- 按 总出勤 计,学生缺勤(
'A'
)严格 少于两天。 - 学生 不会 存在 连续 3 天或 连续 3 天以上的迟到(
'L'
)记录。
如果学生可以获得出勤奖励,返回 true
;否则,返回 false
。
示例 1:
输入: s = "PPALLP"
输出: true
解释: 学生缺勤次数少于 2 次,且不存在 3 天或以上的连续迟到记录。
示例 2:
输入: s = "PPALLL"
输出: false
解释: 学生最后三天连续迟到,所以不满足出勤奖励的条件。
提示:
1 <= s.length <= 1000
s[i]
为'A'
、'L'
或'P'
解题思路
条件 1:缺勤次数严格少于 2 次
- 遍历字符串统计字符
'A'
的个数。 - 如果缺勤次数大于等于 2 次,直接返回
false
。
- 遍历字符串统计字符
条件 2:不存在连续 3 次或以上的迟到
- 使用字符串方法
s.includes('LLL')
判断是否存在连续 3 个'L'
的子串。 - 如果存在,返回
false
。
- 使用字符串方法
如果两项检查均通过,返回
true
。
复杂度分析
- 时间复杂度:
O(n)
,其中n
是字符串长度。- 遍历统计缺勤次数,时间复杂度为
O(n)
; - 使用
s.includes('LLL')
检查连续迟到,时间复杂度为O(n)
。 - 总时间复杂度
O(n) + O(n) = O(n)
。
- 遍历统计缺勤次数,时间复杂度为
- 空间复杂度:
O(1)
,没有额外的数据结构使用。
代码
/**
* @param {string} s
* @return {boolean}
*/
var checkRecord = function (s) {
// 检查缺勤次数是否少于 2 次
let absentCount = 0;
for (let char of s) {
if (char === 'A') {
absentCount++;
if (absentCount >= 2) return false; // 提前终止
}
}
// 检查是否存在连续 3 次迟到
if (s.includes('LLL')) return false;
return true;
};
相关题目
题号 | 标题 | 题解 | 标签 | 难度 | 力扣 |
---|---|---|---|---|---|
552 | 学生出勤记录 II | 动态规划 | 🔴 | 🀄️ 🔗 |