一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第15天,点击查看活动详情
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题给出一个字符串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代码记录如下:
时间复杂度O(n),n为字符串s的长度
空间复杂度O(1)
以上是本期内容,欢迎大佬们点赞评论,下期见~~