1. 程式人生 > 其它 >【LeetCode】第551題——學生出勤記錄I(難度:簡單)

【LeetCode】第551題——學生出勤記錄I(難度:簡單)

技術標籤:LeetCode題解javaleetcode

【LeetCode】第551題——學生出勤記錄I(難度:簡單)

題目描述

給定一個字串來代表一個學生的出勤記錄,這個記錄僅包含以下三個字元:

  • ‘A’ : Absent,缺勤
  • ‘L’ : Late,遲到
  • ‘P’ : Present,到場

如果一個學生的出勤記錄中不超過一個’A’(缺勤)並且不超過兩個連續的’L’(遲到),那麼這個學生會被獎賞。

你需要根據這個學生的出勤記錄判斷他是否會被獎賞。

  1. 示例 1:
    輸入: “PPALLP”
    輸出: True

  2. 示例 2:
    輸入: “PPALLL”
    輸出: False

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/student-attendance-record-i
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解題思路

因為‘A’不能出現兩次,因此可以用boolean來記錄,‘L’不能連續出現三次,因此用int來記錄。

也可以用indexOf來做,不過本人比較喜歡全遍歷。

程式碼詳解

class Solution {
    public boolean checkRecord(String s) {
        boolean A_flag = true;	// 不允許出現兩次A,用boolean足夠了
int L_count = 0; // 不允許連續出現三次L,用int記錄 for(int i = 0; i < s.length(); ++i) { if(s.charAt(i) == 'A') { L_count = 0; // 遍歷到非L時,L_count需清零 if(A_flag) { A_flag = false; // 允許出現一次 } else { return
false; // 但不允許出現第二次 } } else if(s.charAt(i) == 'L') { ++L_count; // 遍歷到L就自加 if(L_count == 3) { // 連續三次就返回false return false; } } else { L_count = 0; // 遍歷到非L時,L_count需清零 } } return true; } }

注意點

  1. 注意遍歷到非L時,L_count需清零。
  2. 本方法可以在滿足條件時提前終止迴圈。