File tree Expand file tree Collapse file tree 1 file changed +77
-0
lines changed Expand file tree Collapse file tree 1 file changed +77
-0
lines changed Original file line number Diff line number Diff line change
1
+ #### [ 551. 学生出勤记录 I] ( https://leetcode-cn.com/problems/student-attendance-record-i/ )
2
+
3
+ 给你一个字符串 s 表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:
4
+
5
+ ```
6
+ 'A':Absent,缺勤
7
+ 'L':Late,迟到
8
+ 'P':Present,到场
9
+ 如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:
10
+
11
+ 按 总出勤 计,学生缺勤('A')严格 少于两天。
12
+ 学生 不会 存在 连续 3 天或 3 天以上的迟到('L')记录。
13
+ 如果学生可以获得出勤奖励,返回 true ;否则,返回 false 。
14
+
15
+ 示例 1:
16
+ 输入:s = "PPALLP"
17
+ 输出:true
18
+ 解释:学生缺勤次数少于 2 次,且不存在 3 天或以上的连续迟到记录。
19
+
20
+ 示例 2:
21
+ 输入:s = "PPALLL"
22
+ 输出:false
23
+ 解释:学生最后三天连续迟到,所以不满足出勤奖励的条件。
24
+
25
+ 提示:
26
+ 1 <= s.length <= 1000
27
+ s[i] 为 'A'、'L' 或 'P'
28
+ ```
29
+
30
+
31
+
32
+ ** 解题思路:**
33
+
34
+ 遍历过程中,记录缺勤次数和连续迟到次数,根据遍历到的字符更新缺勤次数和连续迟到次数:
35
+
36
+ - 如果遇 ` A ` ,即缺勤,则将缺勤次数加 1,否则缺勤次数不变;
37
+
38
+ - 如果遇到 ` L ` ,即迟到,则将连续迟到次数加 1,否则将连续迟到次数清零。
39
+
40
+ - 如果在更新缺勤次数和连续迟到次数之后,出现缺勤次数大于或等于 2 或者连续迟到次数大于或等于 3,则该出勤记录不满足可奖励的要求,返回 ` false ` 。
41
+
42
+ - 如果遍历结束时未出现出勤记录不满足可奖励的要求的情况,则返回 ` true ` 。
43
+
44
+
45
+
46
+ ** 代码演示(Golang):**
47
+
48
+ ``` go
49
+ func checkRecord (s string ) bool {
50
+ var (
51
+ lateRes int
52
+ absentCnt int
53
+ )
54
+ for _,ch := range s {
55
+ if ch == ' A' {
56
+ absentCnt++
57
+ if absentCnt >= 2 {
58
+ return false
59
+ }
60
+ }
61
+
62
+ if ch == ' L' {
63
+ lateRes++
64
+ if lateRes >=3 {
65
+ return false
66
+ }
67
+ }else {
68
+ lateRes = 0
69
+ }
70
+ }
71
+ return true
72
+ }
73
+ ```
74
+
75
+ > - 时间复杂度:O(n),其中 n* n* 是字符串 s 的长度。需要遍历字符串 s 一次。
76
+ > - 空间复杂度:O(1)。
77
+
You can’t perform that action at this time.
0 commit comments