leetcode 551 学生记录 |

给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符:

‘A’ : Absent,缺勤
‘L’ : Late,迟到
‘P’ : Present,到场
如果一个学生的出勤记录中不超过一个’A’(缺勤)并且不超过两个连续的’L’(迟到),那么这个学生会被奖赏。

你需要根据这个学生的出勤记录判断他是否会被奖赏。

示例 1:

输入: “PPALLP”
输出: True
示例 2:

输入: “PPALLL”
输出: False

class Solution {
    public boolean checkRecord(String s) {
        int A=0;
        if(s.length()==2 && s.charAt(0)=='A' &&s.charAt(1)=='A') return false;
        //长度为2的情况比如 AA
        if(s.charAt(0)=='A') A++;
        for(int i=1;i<s.length()-1;i++){
            if(s.charAt(i)=='A') A++;
            if(s.charAt(i)=='L' && s.charAt(i-1)=='L' && s.charAt(i+1)=='L') 
                return false;
            if(A>1) return false;//for循环里面直接判断
        }
        return true;
    }
}

利用indexOf API判断

class Solution {
    public boolean checkRecord(String s) {
        int A=0;
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)=='A') A++;
            if(A>1) return false;//for循环里面直接判断
        }
        return s.indexOf("LLL")<0;
    }
}

正则表达式

class Solution {
    public boolean checkRecord(String s) {
        return !s.matches(".*(A.*A|LLL).*");
    }
}

 . : 匹配任何除了换行以外的单个字符。

* : 匹配 0 个或者 大于 0* 符号前面的表达式。

.* : 匹配任何字符串

a|b : 要么匹配 a 要么匹配 b

matches 方法被用来检查是否有字符串匹配我们给定的正则表达式。

包含 2 个或更多 AA 的正则表达式为 
.*A.*A.*.∗A.∗A.∗ ,
包含子字符串 LLLLLL 对应的正则表达式为 
.*LLL.*.∗LLL.∗。我们可以把两个正则表达式
用 |∣ 形成一个正则表达式,来表示或者包含超过 1 个 AA 或者
包含 3 个连续的 LL 的字符串。那么正则表达就变成 
.*(A.*A|LLL).*.(A.∗A∣LLL).∗。
只有当字符串不能匹配正则表达式的时候我们返回 true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值