一.问题描述
这个描述比较诡异,一不小心就会看错:
这里说的是如果这个同学没有超过一次缺席(A)或者没有超过连续两次迟到(L),他就会获得奖励,注意连续这两个字。
二. 解决方法
2.1 switch语句解决问题
class Solution {
public:
bool checkRecord(string s) {
int anums{0};
int lnums{0};
for(char a:s){
switch(a){
case 'L':
if(lnums<2){
lnums++;
}else{
return false;
}
break;
case 'A':
anums++;
default:
lnums= lnums>0?0:lnums;
}
}
return (anums<=1)?true:false;
}
}
这里用的是switch,写完之后就有点感觉大材小用啦,因为只有两个判断,而且由于这里要进行L的个数的变化,也就是如果说现在的字符不是L,那么之前的L的连续的个数就要重置为0,这样就导致我们需要在出了case 'L'的其他的判断之外都要执行下面这条语句
lnums= lnums>0?0:lnums;
有心的同学可以发现,我这里case 'A'的case下面没有break,也就是说无论如何都要执行,尽管利用了switch的语句特性,但是代码的可读性不是很好。由此进行了二次改进。
2.2 if语句解决问题
class Solution {
public:
bool checkRecord(string s) {
int anums{0};
int lnums{0};
for(char a:s){
if(a=='L'){
lnums++;
}else{
lnums=0;
}
if(a=='A'){anums++;}
if(anums>1 || lnums>2 ) return false;
}
return true;
}
};
这样看起来就好多啦。ok,继续加油啦。