打败100%的用户LeetCode学生出勤记录使用JavaScript解题|前端学算法

113 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情

有人相爱,有人夜里开车看海,我是leetcode第一题都做不出来

这是leetcode的第551题:学生出勤记录 I

学生出勤记录 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
};

image.png

知识点

  • includes: 判断字符串是否包含指定的子字符串;如果找到匹配的字符串则返回 true,否则返回 false
  • ?:三元运算符:三元运算符相当于if判断

先执行判断语句,如果为真就执行表达式1,如果为假就执行表达式2

let result = 判断 ? 表达式1 : 表达式2