Problem

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, or false otherwise.

Examples

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.

Solution

Here is the video explaining below methods:

Method 1 - Using Regex

We know that:

  • .: Matches any single character
  • *: Matches the preceding element
  • So, .* ⇨ any char occurs zero or more times.

We can use regex to do it in one line:

  • .*A.*A.* - At least 2 absences occur
  • .*LLL.* - Student is late for 3 or more consecutive days
  • We can use | to combine the condition: .*LLL.*|.*A.*A.*

Code

Java
class Solution {
    public boolean checkRecord(String s) {
        return !s.matches(".*A.*A.*|.*LLL.*");
    }
}

Complexity

  • ⏰ Time complexity: O(n)
  • 🧺 Space complexity: O(1)

Method 2 - Iterative using string functions

Code

Java
public class Solution {
    public boolean checkRecord(String s) {
        if(s.indexOf("A") != s.lastIndexOf("A") || s.contains("LLL")) {
	        return false;
        }
        return true;
    }
}

Complexity

  • ⏰ Time complexity: O(n)
  • 🧺 Space complexity: O(1)

Method 3 - Iterative by looping on string

Code

Java
class Solution {
    public boolean checkRecord(String s) { 
        int a = 0, l = 0;
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == 'A') {
                a++;
                if (a > 1) {
                    return false;
                }
                l = 0;
            } else if (c == 'L') {
                l++;
                if (l > 2) {
                    return false;
                }

            } else {
                l = 0;
            }
        }
        return true;
    }
}

Complexity

  • ⏰ Time complexity: O(n)
  • 🧺 Space complexity: O(1)