学生出勤记录 I
给你一个字符串 s
表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:
'A'
:Absent,缺勤'L'
:Late,迟到'P'
:Present,到场
如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:
- 按 总出勤 计,学生缺勤(
'A'
)严格 少于两天。 - 学生 不会 存在 连续 3 天或 连续 3 天以上的迟到(
'L'
)记录。
如果学生可以获得出勤奖励,返回 true
;否则,返回 false
。
示例 1:
输入: s = "PPALLP" 输出: true 解释: 学生缺勤次数少于 2 次,且不存在 3 天或以上的连续迟到记录。
示例 2:
输入: s = "PPALLL" 输出: false 解释: 学生最后三天连续迟到,所以不满足出勤奖励的条件。
解题思路
必须满足两个条件才能获得奖励,所以只要有一条不符合就返回false;我们可以先判断有没有连续三天迟到,如果没有连续迟到再判断缺勤次数,只要次数达到两次那也没有奖励
拆分为具体步骤如下:
- 第一步:判断有没有连续三天迟到,可以用
includes
判断有没有连续的三个LLL
,如果有就返回false - 第二步:走到第二步就说明没有连续三天迟到;此时开始判断缺勤的总次数,我们初始化一个变量
count
来存储缺勤的次数 - 第三步: 循环遍历s,判断当前元素是不是等于
A
(缺勤),如果有就累加 - 第四步:判断缺勤的次数,大于2就返回false,否则就返回true
var checkRecord = function(s) { if(s.includes('LLL')) return false let count = 0 for(let i=0;i<s.length;i++){ if(s[i] === 'A') count++ } return count>=2 ? false : true };
知识点
includes
: 判断字符串是否包含指定的子字符串;如果找到匹配的字符串则返回 true,否则返回 false?:三元运算符
:三元运算符相当于if判断
先执行判断语句,如果为真就执行表达式1,如果为假就执行表达式2
let result = 判断 ? 表达式1 : 表达式2