【LeetCode】551. 学生出勤记录 I

156 阅读2分钟

image.png

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

image.png

  • 题目示例

image.png

  • 题目解析

    • 本题给出一个字符串s参数。其是由"A"、"L"和"P"组成

二、思路分析:

我们拿到本题,要求对学生的考勤进行计算。学生出勤有三种状态,A(缺勤)、L(迟到)、P(到场)。

咋看题目,对给出的字符串s,只需要计算缺勤和迟到的次数就可以了(此处有坑,xdm要仔细读题意呀)

满足出勤奖的条件是

  • 缺勤的次数少于两天:缺勤次数大于1时,就不符合出勤奖
  • 不会存在连续3天或连续3 天以上的迟到('L')记录: 当迟到连续次数大于2时,就不符合出勤奖。(此处需要明白连续

粗心大意的我,没有注意连续字眼,只是想当然地迟到次数大于2时,就不符合出勤奖。如"LALL"--结果就返回FALSE

重新梳理一下思路,解答该题目,要清楚理清连续迟到次数的条件

  • 首先使用for循环对字符串s进行遍历取出每一个字母
  • 对取出的字母与"A"字母相等时,则临时变量 A 进行+1,临时变量 L 赋值为0
  • 当 A 大于1时,则直接返回false
  • 如果取出的字母与"L"字母相等时,则临时变量 L 进行+1。并对变量 L 进行判断大于2时,则返回False
  • 如果取出的字母是"P"字母,则临时变量 L 赋值为0
  • 直到变量完整个字符串s时,都符合出勤奖要求,则返回True

根据以上思路,我们使用Python就可以轻松实现如下:

class Solution(object):
    def checkRecord(self, s):
        """
        :type s: str
        :rtype: bool
        """

        A = L = 0
    
        for i in range(len(s)):

            if s[i] == "A":
                A = A+1
                L = 0
                if A > 1:
                    return False
            
            elif s[i] == "L":
                L = L +1
                if L >2 :
                    return False
            else:
                L = 0

        return True

除了使用for循环遍历字符串方法外,还有其他方法吗?

  • 我们可以使用Python字符串 count() 方法
  • count("A") 次数小于1 并且 count("LLL") 次数为0时,就是符合出勤条件
return s.count("A")< 2 and s.count("LLL") == 0

三、总结:

本题的难点就是如何解决连续迟到数据计算,可以通过赋值方法。AC代码记录如下:

image.png

时间复杂度O(n),n为字符串s的长度

空间复杂度O(1)

以上是本期内容,欢迎大佬们点赞评论,下期见~~