zoukankan      html  css  js  c++  java
  • LeetCode:学生的出勤记录|【551】

    LeetCode:学生的出勤记录|【551】

    题目描述

    给定一个字符串来代表一个学生的出勤纪录,这个纪录仅包含以下三个字符:

    1. 'A' : Absent,缺勤
    2. 'L' : Late,迟到
    3. 'P' : Present,到场

    如果一个学生的出勤纪录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),那么这个学生会被奖赏。

    你需要根据这个学生的出勤纪录判断他是否会被奖赏。

    示例 1:

    输入: "PPALLP"
    输出: True
    

    示例 2:

    输入: "PPALLL"
    输出: False

    题目分析

      对于字符串问题,我们需要反思,所谓的顽石——正则表达式

      很多问题明明可以快速得到解决,就是因为我们的下的苦太少了,所以事与愿违。

      L{3,}可以表示连续3个及以上L出现,A.*A可以表示出现2次A的情况,这样如果正则匹配成功,那么就说明不会被奖赏!  

    Java题解

    class Solution {
        public boolean checkRecord(String s)
        {
            if(s.matches(".*L{3,}.*"))
                return false;
            if(s.matches(".*A.*A.*"))
                return false;
            return true;
        }
    }

      但是上面的对于这道题来说正则表达式解法简洁却不高效

      我们循环一次字符串,一个变量统计A的次数,一个变量统计连续L的次数,连续次数有一个技巧,遇到第一个L的时候开始计数,下一个不是L的话,立刻清空计数变量

    public boolean checkRecord(String s) {
            int a = 0;
            int l = 0;
    
            for(char c :s.toCharArray())
            {
                if(c=='A')
                    a++;
                if(c=='L')
                    l++;
                else
                    l=0;
                if(a>1||l>=3)
                    return false;
            }
            return true;
        }
    

      

  • 相关阅读:
    angularJs项目实战!02:前端的页面分解与组装
    angularJs项目实战!01:模块划分和目录组织
    django admin 导出数据简单示例
    django 学习之model操作(想细化)
    6.11大杂烩。。
    InlineModelAdmin对象的学习
    django-salmonella的使用
    python 保留两位小数
    Django 时间与时区设置问题
    Django学习
  • 原文地址:https://www.cnblogs.com/MrSaver/p/9801110.html
Copyright © 2011-2022 走看看