551 学生出勤纪录 I
难度:Easy
题目描述
给定一个字符串来代表一个学生的出勤纪录,这个纪录仅包含以下三个字符:
- ‘A’ : Absent,缺勤
- ‘L’ : Late,迟到
- ‘P’ : Present,到场
如果一个学生的出勤纪录中不超过一个’A’(缺勤)并且不超过两个连续的’L’(迟到),那么这个学生会被奖赏。
你需要根据这个学生的出勤纪录判断他是否会被奖赏
示例
1 | 输入: "PPALLP" |
解法一
1 | class Solution { |
知识点:
对字符串的遍历: for(char c:s)
解法二
1 | class Solution { |
知识点:
string中的find()
函数:若查找成功,返回按查找规则找到的第一个字符或子串的位置;若查找失败,返回string::npos
。rfind()
与find()
的差别在于查找顺序不一样,rfind()
是从指定位置起向前查找,直到串首。
参见 https://www.cnblogs.com/zpcdbky/p/4471454.html
解法三
1 | class Solution { |
思路:
使用正则匹配,找出不合题意的情况,然后取反即可。正则匹配式是A.*A|LLL
,.*
表示有零个或者多个,那么A.*A
就是至少有两A的情况,LLL
是三个连续的迟到,|
表示两个是或的关系,只要能匹配出任意一种情况,就会返回false
。
知识点:
regex_search()
返回true
或false
,搜索字符串中存在符合规则的子字符串 。参考:https://blog.csdn.net/qq_34802416/article/details/79307102
正则表达式中,.*
表示零个或多个。
552 学生出勤纪录 II
难度:Hard
挖坑