Date:2019-4-14
题目地址:https://leetcode-cn.com/problems/student-attendance-record-i/
给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符:
- ‘A’ : Absent,缺勤
- ‘L’ : Late,迟到
- ‘P’ : Present,到场
如果一个学生的出勤记录中不超过一个’A’(缺勤)并且不超过两个连续的’L’(迟到),那么这个学生会被奖赏。
你需要根据这个学生的出勤记录判断他是否会被奖赏。
示例 1:
输入: “PPALLP” 输出: True
示例 2:
输入: “PPALLL” 输出: False
解题
从字符串中取判断是否有超过一个A和超过两个连续的LL的字符
const checkRecord = (s) => {
let sArr = s.split('')
// 如果可以找到 字符串 A 的长度是否大于 1, 如果大于 1 直接跳出
if (sArr.filter(item => item === 'A').length > 1) {
return false
}
// 如果前两位或者后两位相等,也跳出
if (
sArr.find((item, index) => {
return item === 'L' && (
(item === sArr[index + 2] && item === sArr[index + 1]) ||
(item === sArr[index - 2] && item === sArr[index - 1])
)
})
) {
return false
}
// 如果都没有的话则返回 true
return true
};
更加简练的方式
const checkRecord = (s) => {
// 直接取判断是否有LLL
if(s.indexOf('LLL') > -1) {
return false
}
// 判断A出现的次数,如果A出现了1次,那么A的位置不会发生改变,否则会发生改变
return s.indexOf('A') === s.lastIndexOf('A')
}
为什么要做这道题,它的实际运用场景是什么
解决字符串内的条件筛选我们应该如何去做