算法第三题:学生出勤记录 2021-08-17

一、题目描述
给你一个字符串 s 表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:
‘A’:Absent,缺勤
‘L’:Late,迟到
‘P’:Present,到场
如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:
按 总出勤 计,学生缺勤(‘A’)严格 少于两天。
学生 不会 存在 连续 3 天或 3 天以上的迟到(‘L’)记录。
如果学生可以获得出勤奖励,返回 true ;否则,返回 false 。

二、自己的解题思路与代码
通过遍历一遍字符串,统计学生的缺勤天数和迟到天数,如果缺勤天数少于2,迟到天数少于4,则是可以评优的,
并且通过记录迟到三次的连续性也是不能拿到优秀的。
但是最后代码却没有通过,因为题里主要强调的是连续迟到,却不是迟到天数的问题,感觉好傻呀!

 x=[0,0]
        i=0
        for p in s:
            
            if p=='A':
                x[0]+=1
                i=0
            elif p=='P':
                i=0
            elif p=='L':
                x[1]+=1
                i=i+1
            if i==3:
                return False
        if x[0]<2 and x[1]<4:
            return True
        else:
            return False

然后自己又改了一下,就通过了

 x=[0,0]
    i=0
    for p in s:
        
        if p=='A':
            x[0]+=1
            if x[0]>1:
                return  False
            i=0
        elif p=='P':
            i=0
        elif p=='L':
            x[1]+=1
            i=i+1
        if i==3:
            return False
    return True

三、总结
这个题有一个模糊的地方,学生不会存在连续3天或3天以上的迟到,我理解的意思是学生不能连续三天迟到,或迟到天数累积超过3天以上。但题里的意思是不能连续迟到超过3天或以上,但却可以累积迟到3天或以上。
明白题意后,我的代码应该还能优化,下面是优化后的代码

i,j=0,0
for p in s:  
    if p=='A':
        j=j+1
        if j>1:
            return  False
        i=0
    elif p=='P':
        i=0
    elif p=='L':
        i=i+1
    if i==3:
        return False
return True
![提交后的结果](https://img-blog.csdnimg.cn/0fd3490ca2df4354a6dfdf18cf038504.png#pic_center)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值