给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符:
- ‘A’ : Absent,缺勤
- ‘L’ : Late,迟到
- ‘P’ : Present,到场
如果一个学生的出勤记录中不超过一个’A’(缺勤)并且不超过两个连续的’L’(迟到),那么这个学生会被奖赏。
你需要根据这个学生的出勤记录判断他是否会被奖赏。
解法一
利用String的API直接判断
class Solution {
public boolean checkRecord(String s) {
//嘉奖条件:A的个数等于小于1,并且L不能连续三个
//判断A的个数,大于1,直接返回false
if (s.length() - s.replace("A", "").length() > 1) return false;
//判断s中存不存在"LLL",存在返回false
if (s.contains("LLL")) return false;
return true;
//一行写法
//return (s.length() - s.replace("A", "").length() > 1 || s.contains("LLL")) ? false : true;
}
}
解法一用到的API里包含了字符串的修改,所以效率差了些,做的时候是去判断不符合的条件,都通过的返回true,解法二是判断两个嘉奖条件,符合就返回true,思路不同,不过我用的API不如题解二,字符串的修改果然很耗费时间啊。
解法二
解法二是题解里看到的做法,
class Solution {
public boolean checkRecord(String s) {
//嘉奖条件:A的个数等于小于1,并且L不能连续三个
//判断符合的条件
return s.indexOf('A') == s.lastIndexOf('A') && !s.contains("LLL");
}
}
解法三
循环判断,暴力破解,这个就没写了,想了一下,循环里,判断的次数有点多,并且还要定义两个变量记录A和L的个数,应该比不过上面两种做法。