551. 學生出勤記錄 I
給你一個字符串 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’
解題思路
- L:變量代表連續遲到的天數
- A:代表缺勤的總天數
最后根據A和L的按照出勤獎勵的條件:
- 按 總出勤 計,學生缺勤(‘A’)嚴格 少于兩天。
- 學生 不會 存在 連續 3 天或 3 天以上的遲到(‘L’)記錄。
如果在更新缺勤次數和連續遲到次數之后,出現缺勤次數大于或等于 2 或者連續遲到次數大于或等于 3,則該出勤記錄不滿足可獎勵的要求,返回false。如果遍歷結束時未出現出勤記錄不滿足可獎勵的要求的情況,則返回 true。
代碼
class Solution {public boolean checkRecord(String s) {int A=0,L=0;for (int i = 0; i < s.length(); i++) {if (s.charAt(i)=='A'){if (++A==2)return false;}else if (s.charAt(i)=='L'){if (++L>=3)return false;continue;}L=0;}return true;}
}
- 時間復雜度:O(n),其中?n?是字符串?s?的長度。需要遍歷字符串?s?一次。
- 空間復雜度:O(1)。