551. 学生出勤记录 I

转载自Leet Code

题目描述

给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符: - 'A' : Absent,缺勤 - 'L' : Late,迟到 - 'P' : Present,到场

如果一个学生的出勤记录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),那么这个学生会被奖赏。 你需要根据这个学生的出勤记录判断他是否会被奖赏。

示例 1: >输入: "PPALLP" >输出: True

示例 2: >输入: "PPALLL" >输出: False


我的代码

\(T(N) = O(N)\), \(S(N) = O(1)\)

{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class MySolution551 
{
public boolean checkRecord(String s)
{
int countA = 0;
boolean lastIsL = false;
boolean lastLastIsL = false;

for (char ch:s.toCharArray())
{
if (ch=='A') countA++;
if (countA>=2) return false;

if (ch=='L'&&!lastIsL&&!lastLastIsL)
lastLastIsL = true;
else if (ch=='L'&&!lastIsL&&lastLastIsL)
lastIsL = true;
else if (ch!='L'&&(lastIsL||lastLastIsL))
{
lastIsL = false; lastLastIsL = false;
}
else if (ch=='L'&&lastIsL&&lastLastIsL)
return false;
}
return true;
}
}