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;
    }

  

原文地址:https://www.cnblogs.com/MrSaver/p/9801110.html

时间: 2024-07-30 18:36:44

LeetCode:学生的出勤记录|【551】的相关文章

力扣(LeetCode)学生出勤记录I 个人题解

给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符: 'A' : Absent,缺勤 'L' : Late,迟到 'P' : Present,到场 如果一个学生的出勤记录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),那么这个学生会被奖赏. 你需要根据这个学生的出勤记录判断他是否会被奖赏. 示例 1: 输入: "PPALLP" 输出: True 示例 2: 输入: "PPALLL" 输出: False 做法比较清晰,当A的次数大于1时,

Leetcode-552 Student Attendance Record II(学生出勤记录 II)

1 #define maxn 1000000 2 #define _for(i,a,b) for(int i = (a);i < (b);i ++) 3 #define pb push_back 4 #define MOD 1000000007 5 6 class Solution 7 { 8 public: 9 int checkRecord(int n) 10 { 11 long long int dp[2][2][3] {0}; 12 13 dp[0][0][0] = dp[0][0][1

考勤助手——学生查询出勤用例图

本周主要是根据学生的子系统进行用例图的设计,学生涉及的主要功能就是查询出勤,也可以查看个人信箱,故对此进行如下设计:

[LeetCode]Valid Sudoku解题记录

这道题考查对二维数组的处理,哈希表. 1.最自然的方法就是分别看每个数是否符合三个规则,所以就需要相应的数据结构来 记录这些信息,判定是否存在,显然最先想到用哈希表. 2.学会把问题抽象成一个个的子问题. 3.在索引的构建上下工夫. 4.底层数组如何对应的细节没有那么重要,重要的是构成了问题的全集. 代码:这里 附图:一趟遍历时根据i,j,对应到具体的grid,这里的构造模式有多种(??)

[LeetCode] Logger Rate Limiter 记录速率限制器

Design a logger system that receive stream of messages along with its timestamps, each message should be printed if and only if it is not printed in the last 10 seconds. Given a message and a timestamp (in seconds granularity), return true if the mes

2015.03.30 LeetCode Merge Intervals 解题记录

今天下午做了一道题.leetcode merge intervals 属于比较难的题目. 首先用collections.sort 给list排序,然后用两个while loop来比较两个interval 的start, end . 从而生成新的interal,再插入到新的list 返回结果. 下面给出自己的代码: /* 50 Merge Intervals https://leetcode.com/problems/merge-intervals/ Given a collection of i

现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。 编写一个函数input,用来输入一个学生的数据记录。 编写一个函数print,打印一个学生的数据记录。 在主函数调用这两个函数,读取N条记录输入,再按要求输出。 N&lt;100

#include <iostream> using namespace std; struct student {char num[100];  char name[100];  int a;  int b;  int c; }stu[100]; void input(int N) {for(int i=0;i<N;i++)  cin>>stu[i].num>>stu[i].name>>stu[i].a>>stu[i].b>>s

LeetCode 边做边记录

其实就是把有道云笔记的东西搬过来, 不定期会更新 随便写写的东西,很多都需要优化, 如果有人看到,希望能给点建议,谢谢! 1.Palindrome Number public class Solution { public boolean isPalindrome(int x) { int y = 0; int tmp = x; if(x < 0){tmp = x*(-1);} while(tmp != 0){ y = y*10 + tmp%10; tmp = tmp/10; } if(x ==

出勤记录I HihoCoder - 1481

字符串水题: #include <iostream> #include <cstdio> #include <cstring> #include <string> using namespace std; int main() { string s; int cases; string wr="LLL"; scanf("%d",&cases); while(cases--) { int res=0; cin&g