给你一个字符串 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'
Related Topics
  • 字符串
  • \n
  • 👍 89
  • 👎 0
  • 题解

    8月17日每日一题

    一次遍历。两个变量统计判断,没啥复杂的

    public boolean checkRecord(String s) {
            if (s == null || s.length() <=1){
                return true;
            }
            // 'A':Absent,缺勤
            // 'L':Late,迟到
            // 'P':Present,到场
            if (s.length()==2){
                return !(s.charAt(0)=='A'&& s.charAt(1)=='A');
            }
    
            int aCount = 0;
            int lCount = 0;
            //先把前两位的算下
            for (int i = 0; i < 2; i++) {
                if (s.charAt(i)=='A'){
                    aCount++;
                }
                if (s.charAt(i)=='L'){
                    lCount++;
                }else{
                    lCount=0;
                }
            }
            //从第三天开始需要判断
            for (int i = 2; i < s.length(); i++) {
                if (s.charAt(i)=='A'){
                    aCount++;
                    //只要总缺勤天数达到了2,就说明不符合
                    if (aCount >= 2){
                        return false;
                    }
                    //额。。。。这个,。。没上课的时候连续迟到也归零,
                    //所以 LLA 的可以获得出勤奖励
                    //而 LLL 的得不到出勤奖励
                    lCount=0;
                }else if (s.charAt(i)=='L'){
                    //如果当天迟到了,连续迟到天数加1,
                    lCount++;
                    if (lCount == 3){
                        //当连续迟到了3天,则不符合
                        return false;
                    }
                }else{
                    //如果当天没迟到,则连续迟到的记录归零
                    lCount=0;
                }
            }
            return true;
        }

    不过有点点点小问题。。我注解里写的

    LLA 的可以获得出勤奖励,而 LLL 的得不到出勤奖励,第三天假如迟到的话不如直接缺勤…….emmmm