leetcode551_Student_Attendance_Record1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33797928/article/details/79011144

学生出勤记录

You are given a string representing an attendance record for a student. The record only contains the following three characters:

'A' : Absent.
'L' : Late.
'P' : Present.

A student could be rewarded if his attendance record doesn’t contain more than one ‘A’ (absent) or more than two continuous ‘L’ (late).

You need to return whether the student could be rewarded according to his attendance record.

Example 1:

Input: “PPALLP”
Output: True

Example 2:

Input: “PPALLL”
Output: False

  • 1计数器解决
    分别记录缺勤和连续迟到的次数,如果当前遇到缺勤,那么缺勤计数器自增1,如果此时次数大于1了,说明已经不是优秀了,直接返回false,否则连续迟到计数器清零。如果当前遇到迟到,那么连续迟到计数器自增1,如果此时连续迟到计数器大于1了,说明已经不是优秀了,直接返回false。如果遇到正常出勤了,那么连续迟到计数器清零

  • 2index() lastindex()

//  需要使用 缺勤计数器 和 迟到计数器吗 我看完全不需要这样做
    public static boolean checkRecord(String s) {
        // 这样是最巧妙的
        return s.indexOf('A') == s.lastIndexOf('A') && s.contains("LLL");
    }

    // 第二种最普通的方法 
    public static boolean checkRecord2(String s) {
        int countA = 0; // 缺勤计数器
        int countL = 0; // 迟到计数器
        for (Character character : s.toCharArray()) {
            if (character == 'A'){
                countA++;
                if (countA > 1){
                    return false;
                }
                countL = 0;
            }
            else if (character == 'L'){
                countL++;
                if (countL > 2){
                    return false;
                }
            }
            else {
                countL = 0;
            }
        }
        return true;

    }
阅读更多

没有更多推荐了,返回首页