Day5 EP-551 Student Attendance

2018-02-02  本文已影响16人  李庆文

一.问题描述

问题描述

这个描述比较诡异,一不小心就会看错:
这里说的是如果这个同学没有超过一次缺席(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,继续加油啦。

上一篇下一篇

猜你喜欢

热点阅读