美文网首页
Day5 EP-551 Student Attendance

Day5 EP-551 Student Attendance

作者: 李庆文 | 来源:发表于2018-02-02 23:26 被阅读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,继续加油啦。

    相关文章

      网友评论

          本文标题:Day5 EP-551 Student Attendance

          本文链接:https://www.haomeiwen.com/subject/bxnjzxtx.html