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
挖坑