给你一个字符串 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
题解
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
发表评论