题目描述:

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的时候,明显清爽代码更省时间。

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

最新文章

  1. Java的输入方式总结
  2. 【HTML5】Web Audio API打造超炫的音乐可视化效果
  3. python基础知识2——基本的数据类型——整型,长整型,浮点型,字符串
  4. .Net判断一个对象是否为数值类型探讨总结(高营养含量,含最终代码及跑分)
  5. Github 扩展推荐
  6. 深度剖析Linux与Windows系统的区别,新手必读!
  7. python-判断系统平台
  8. 记录几款不错的chrome主题
  9. Linux:安装图形界面
  10. 使用MySQL Migration Toolkit快速将Oracle数据导入MySQL[转]
  11. 怎样调整CODESOFT中条码线的宽度
  12. 深入了解Qt(三)之元signal和slot
  13. struts2.1笔记02:servlet简介
  14. 实验五 Java网络编程及安全
  15. 利用纯java捕获和播放音频
  16. 基于Struts2 的日志管理系统的Java实现
  17. 软碟通UltraISO 9.65.3237官方注册版
  18. DevExpress ASP.NET 使用经验谈(3)-XPO对象的使用(使用指定数据连接)
  19. Python内置函数(59)——open
  20. OO第十二次作业

热门文章

  1. 如何清除保存的FTP用户名和密码
  2. rsyslog收集nginx日志配置
  3. Linux下查看Nginx的并发连接数和连接状态-乾颐堂
  4. ubuntu如何安装samba
  5. realsense pcl git
  6. TF Boys (TensorFlow Boys ) 养成记(一):TensorFlow 基本操作
  7. mybatis 传参是 list&lt;string&gt; 的注意事项
  8. [GO]方法的重写
  9. ceph中pool的管理
  10. CoderForces 518D Ilya and Escalator (期望DP)