题目描述:

You are given a string representing an attendance record for a student. The record only contains the following three characters:

  1. 'A' : Absent.
  2. 'L' : Late.
  3. 'P' : Present.

A student could be rewarded if his attendance record doesn't contain more than one 'A' (absent) or more than two continuous 'L' (late).

You need to return whether the student could be rewarded according to his attendance record.

Example 1:

Input: "PPALLP"
Output: True

Example 2:

Input: "PPALLL"
Output: False

要完成的函数:

bool checkRecord(string s)

说明:

1、这道题给定一个字符串,其中只有三种字符P/L/A,分别代表在场/迟到/缺席。如果一个学生出现了一次以上的缺席,或者连续两次以上的迟到,那么他就不能被奖励。要求判断是否某个学生能被奖励。

2、关于A的,很容易,遍历一遍字符串统计A出现次数,当次数大于1时,返回false,结束遍历。

关于L的,也不难,遍历一遍字符串,当碰到L时,判断下一个字符和再下一个字符是否均为L,如果满足,返回false,结束遍历(这里要注意边界条件,即下一个字符是否在字符串以内);如果不满足,那么继续处理下一个字符。

代码如下:

    bool checkRecord(string s)
{
int counta=,countl=;
int s1=s.size();
for(int i=;i<s1;i++)
{
if(s[i]=='A')
{
counta++;
if(counta>)
return false;
}
else if(s[i+]=='L'&&s[i+]=='L'&&s[i]=='L')
{
if(i+<s1)
return false;
}
}
return true;
}

上述代码实测6ms,beats 70.11% of cpp submissions。

3、另一种方法

参考了讨论区的代码实现,发现了另一种实际花费时间更少的方法。

代码同样分享给大家,如下:

    bool checkRecord(string s)
{
int counta=,countl=;
for(int i = ;i < s.size();i++)
{
if(s[i]=='A')
{
counta++;
countl=;//清空countl,重新开始
if(counta>)
return false;
}
else if(s[i]=='L')
{
countl++;
if(countl>)
return false;
}
else
countl=;
}
return true;
}

上述代码实测4ms,beats 100% of cpp submissions。

这样写代码看起来更加“清爽”,判断是否出现了连续的几个相同字符,采用的是碰到其他字符就“清空”的方法。

而2中的方法,是碰到‘L’时继续判断下一个以及再下一个字符是否仍是'L'的方式,这种方法不需要引进countl的频繁计算。

笔者还是更加喜欢“清爽”的代码,当L出现几百次才要return false的时候,明显清爽代码更省时间。

这道题目给予的启示是:当要判断字符是否连续出现时,可以采用“清空”的方法来做。

leetcode-551-Student Attendance Record I(判断是否出现连续几个相同字符)的更多相关文章

  1. LeetCode 551. Student Attendance Record I (C++)

    题目: You are given a string representing an attendance record for a student. The record only contains ...

  2. LeetCode 551. Student Attendance Record I (学生出勤纪录 I)

    You are given a string representing an attendance record for a student. The record only contains the ...

  3. 551. Student Attendance Record I【easy】

    551. Student Attendance Record I[easy] You are given a string representing an attendance record for ...

  4. 【leetcode_easy】551. Student Attendance Record I

    problem 551. Student Attendance Record I 题意: solution: class Solution { public: bool checkRecord(str ...

  5. 551. Student Attendance Record I 从字符串判断学生考勤

    [抄题]: You are given a string representing an attendance record for a student. The record only contai ...

  6. [LeetCode] 552. Student Attendance Record II 学生出勤记录之二

    Given a positive integer n, return the number of all possible attendance records with length n, whic ...

  7. 【LeetCode】551. Student Attendance Record I 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 正则表达式 统计 日期 题目地址:https://l ...

  8. [LeetCode&Python] Problem 551. Student Attendance Record I

    You are given a string representing an attendance record for a student. The record only contains the ...

  9. 551. Student Attendance Record I + Student Attendance Record II

    ▶ 一个学生的考勤状况是一个字符串,其中各字符的含义是:A 缺勤,L 迟到,P 正常.如果一个学生考勤状况中 A 不超过一个,且没有连续两个 L(L 可以有多个,但是不能连续),则称该学生达标(原文表 ...

随机推荐

  1. 275. H-Index II 递增排序后的论文引用量

    [抄题]: Given an array of citations in ascending order (each citation is a non-negative integer) of a ...

  2. easyui图标大全

    .icon-blank{ background:url('icons/blank.gif') no-repeat; } .icon-add{ background:url('icons/edit_ad ...

  3. IntelliJ IDEA开发golang环境配置

    IntelliJ IDEA开发golang环境配置 首先把GO安装好...(自行安装,附上一篇我之前写的MAC安装GO) 安装IntelliJ IDEA,下载地址: https://www.jetbr ...

  4. sql分组获取第一条记录(sql+oracle)

    sql版本 select * from (select t.CloseDate,t.ExpiryDate,t.DataTypeLookupID,ROW_NUMBER() over(partition ...

  5. 如何将.crt的ssl证书文件转换成.pem格式

    如何将.crt的ssl证书文件转换成.pem格式 摘自:https://www.landui.com/help/show-8127 2018-07-04 14:55:41 2158次 准备:有一台安装 ...

  6. 马尔可夫决策过程MDP

    1. 马尔可夫模型的几类子模型 马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是马尔可夫性(无 ...

  7. C# JSON使用过程中开发的小工具

    我在用JSON的过程中,经常要去看一下JSON的结构,而JSON串大不部分时候都是未格式化的数据,一次我不得不用一些网页上的在线解析和格式化工具来进行格式化查看,但是这些网页有时候并不好用:因此就结合 ...

  8. 重叠IO

    一. 异步IO        说到重叠模型首先还是提一下异步IO比较好,因为从本质上讲,重叠模型也是一种异步IO模型.       我们知道,相对于计算机执行的其他操作而言,设备IO(文件.管道.套接 ...

  9. 从源代码分析DbSet如何通过ObjectStateManager管理entity lifecycle的生命周期

    一:Savechange的时候,怎么知道哪些entity被add,modify,delete,unchange ???? 如何来辨别... 在entity中打上标记来做表示...已经被跟踪了...当每 ...

  10. IO--磁盘理论

    磁盘从圆心由内向外被分成多个磁道,而每个磁道会被划分成多个连续的扇区 扇区是磁盘寻址的最小单位,而实际上分配空间最小的单位是簇(cluster),因此导致文件大小和实际占用空间大小不一样 磁盘读写数据 ...