列表

详情


551. 学生出勤记录 I

给你一个字符串 s 表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:

如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:

如果学生可以获得出勤奖励,返回 true ;否则,返回 false

 

示例 1:

输入:s = "PPALLP"
输出:true
解释:学生缺勤次数少于 2 次,且不存在 3 天或以上的连续迟到记录。

示例 2:

输入:s = "PPALLL"
输出:false
解释:学生最后三天连续迟到,所以不满足出勤奖励的条件。

 

提示:

相似题目

学生出勤记录 II

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool checkRecord(string s) { } };

python3 解法, 执行用时: 36 ms, 内存消耗: 16.3 MB, 提交时间: 2024-08-18 09:58:58

class Solution:
    def checkRecord(self, s: str) -> bool:
        return s.count('A') < 2 and "LLL" not in s

golang 解法, 执行用时: 0 ms, 内存消耗: 2.1 MB, 提交时间: 2024-08-18 09:58:29

func checkRecord(s string) bool {
    return strings.Count(s, "A") < 2 && !strings.Contains(s, "LLL")
}

java 解法, 执行用时: 2 ms, 内存消耗: 40.8 MB, 提交时间: 2024-08-18 09:58:03

class Solution {
    public boolean checkRecord(String s) {
        return s.chars().filter(c -> c == 'A').count() < 2 && !s.contains("LLL");
    }
}

rust 解法, 执行用时: 2 ms, 内存消耗: 1.9 MB, 提交时间: 2024-08-18 09:57:42

impl Solution {
    pub fn check_record(s: String) -> bool {
        s.bytes().filter(|&c| c == b'A').count() < 2 && !s.contains("LLL")
    }
}

golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2023-09-21 10:55:15

func checkRecord(s string) bool {
    absents, lates := 0, 0
    for _, ch := range s {
        if ch == 'A' {
            absents++
            if absents >= 2 {
                return false
            }
        }
        if ch == 'L' {
            lates++
            if lates >= 3 {
                return false
            }
        } else {
            lates = 0
        }
    }
    return true
}

python3 解法, 执行用时: 40 ms, 内存消耗: 15.8 MB, 提交时间: 2023-09-21 10:54:59

class Solution:
    def checkRecord(self, s: str) -> bool:
        absents = lates = 0
        for i, c in enumerate(s):
            if c == "A":
                absents += 1
                if absents >= 2:
                    return False
            if c == "L":
                lates += 1
                if lates >= 3:
                    return False
            else:
                lates = 0
        
        return True

cpp 解法, 执行用时: 0 ms, 内存消耗: 6.4 MB, 提交时间: 2023-09-21 10:53:32

class Solution {
public:
    bool checkRecord(string s) {
        int absents = 0, lates = 0;
        for (auto &ch : s) {
            if (ch == 'A') {
                absents++;
                if (absents >= 2) {
                    return false;
                }
            }
            if (ch == 'L') {
                lates++;
                if (lates >= 3) {
                    return false;
                }
            } else {
                lates = 0;
            }
        }
        return true;
    }
};

javascript 解法, 执行用时: 56 ms, 内存消耗: 41.1 MB, 提交时间: 2023-09-21 10:53:18

/**
 * @param {string} s
 * @return {boolean}
 */
var checkRecord = function(s) {
    let absents = 0, lates = 0;
    const n = s.length;
    for (let i = 0; i < n; i++) {
        const c = s[i];
        if (c === 'A') {
            absents++;
            if (absents >= 2) {
                return false;
            }
        }
        if (c === 'L') {
            lates++;
            if (lates >= 3) {
                return false;
            }
        } else {
            lates = 0;
        }
    }
    return true;
};

java 解法, 执行用时: 0 ms, 内存消耗: 39.6 MB, 提交时间: 2023-09-21 10:52:48

class Solution {
    public boolean checkRecord(String s) {
        int absents = 0, lates = 0;
        int n = s.length();
        for (int i = 0; i < n; i++) {
            char c = s.charAt(i);
            if (c == 'A') {
                absents++;
                if (absents >= 2) {
                    return false;
                }
            }
            if (c == 'L') {
                lates++;
                if (lates >= 3) {
                    return false;
                }
            } else {
                lates = 0;
            }
        }
        return true;
    }
    
    public boolean checkRecord2(String s) {
        return s.indexOf("A") == s.lastIndexOf("A") && !s.contains("LLL");
    }
}

golang 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2021-06-24 10:06:36

func checkRecord(s string) bool {
	n, late := len(s), 0
	for i := 0; i < n; i++ {
		if i+2 < n && s[i] == s[i+1] && s[i+1] == s[i+2] && s[i+2] == 'L' {
			return false
		}
		if s[i] == 'A' {
			late++
		}
	}
	return late < 2
}

上一题