题目描述
给定一个字符来代表一个学生的出勤记录,这个记录仅包含以下三个字符:
A
: Absent, 缺勤;L
: Late,迟到;P
: Present,到场;
如果一个学生的出勤记录中不超过一个A
并且不超过两个连续的L
(迟到),那么这个学生会被奖赏。
你需要根据这个学生的出勤记录判断他是否会被奖赏。
示例1:
输入: s= “PPALLP”
输出: True
示例2:
输入: s= “PPALLL”
输出: False
要求:
- 该字符串只包含小写的英文字母;
- 给定字符串的长度和
k
在[1, 10000]
范围内;
思路分析
难度是简单 ,这里我们必须要对字符串进行至少一次的遍历,只是如何通过较优雅的手段获取的问题。我们通过题意可知判断为false
的情况下面两种(或同时满足):
'A'
的个数> 1
;L
的连续字符串至少为LLL
;
则我们可以通过“散装”的判断(尽量少借助字符串自有封装函数)来讨论实现:
A
记数 +LLL
的判存,LLL
判存通过判断charAt() [i, i+2] == ‘L’
进行判断;A
记数 +LLL
的判存,LLL
判存通过String.indexOf("LLL") >= 0
或String.constians(str)
判断;
解题代码1
public static boolean solutionBasic(String s) {
if (s == null) {
return false;
}