【LeetCode】551. 学生出勤记录 I(Java)

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

  • ‘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的个数,应该比不过上面两种做法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值