一、题目描述
给你一个字符串 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)