LeetCode练习<三> 找出字符串中连续的字母

题目如下:

/**
 * You are given a string representing an attendance record for a student. The record only contains the
 * following three characters:
 *      'A' : Absent.
 *      'L' : Late.
 *      'P' : Present.
 * A student could be rewarded if his attendance record doesn't contain more than one 'A' (absent) or
 * more than two continuous 'L' (late).
 * You need to return whether the student could be rewarded according to his attendance record.
 * Created by greg on 17-4-16.
 */
 

就是如如一个字符串,判断字符串中是否有超过一个A或者超过连续2个L,(也就是题目中说的包含超过一个A或者超过连续2个L),由以上的情况就返回false,没有就返回true.

一开始没有想到用正则化,打算用StringBuilder,挨个判断,但是忽略了连续二字.最后想到这就是个匹配问题,既然是匹配,那就用正则化.

上代码:

                                                                          
    /**                                                                   
     * 正则表达式:                                                             
     * . 表示任意一个字符                                                         
     * * 表示0个或任意多个字符                                                      
     * .*LLL.* 表示在LLL的前后可以有任意一个或多个字符,只要保证LLL连续就行                          
     * .*A.*A.*A 表示在A的前后可以有任意一个或多个字符,只要保证字符串中出现两个A就行                      
     * @param s                                                           
     * @return                                                            
     */                                                                   
    public static boolean checkRecord1(String s) {                        
//        return s.matches(".*LLL.*|.*A.*A.*");                           
        return !s.matches(".*[L]{3}.*|.*A.*A.*");                         
    }                                                                     
 

在使用正则表达式的时候:我们的目的是找到是否有1个以上A(只要有两个就可以), 或者2个以上连续L(只要有3个连续的L)就可以. 所以说,目标很明确.注意在使用正则化的时候,是匹配的整个字符串,并不仅仅是我们要找的目标, 所以我们要使用"."   ,   "*" 来表示我们目标之外的字符.如果只是用s.matches("[L]{3}"), 那就相当于匹配s是否为"LLL"了.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值