String的matches方法中的.*


LeetCode 551題

You are given a string representing an attendance record for a student. The record only contains the following three characters:

 

  1. 'A' : Absent.
  2. 'L' : Late.
  3. '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.

Example 1:

Input: "PPALLP"
Output: True

 

Example 2:

Input: "PPALLL"
Output: False

這道題非常簡單,如果硬做的話,代碼如下:

public class Solution {
    public boolean checkRecord(String s) {
       int absent=0;
       int late=0;
       for(int i=0;i<s.length();i++){
           if(s.charAt(i)=='A') {
            absent=absent+1;
            if(absent>1) return false;
          }
          if(s.charAt(i)=='L'){
            late=late+1;
            if(late>2) return false;
          }
         else{
            late=0;
           }
       }
return true;
}
}

 

然而簡單的解法只用一行:

public boolean checkRecord(String s){

   return !s.matches(".*LLL.*|.*A.*A.*");

}

JAVA的String中的matches方法可以用作字符匹配,規則與正則表達式一樣。

在這里,“.”表示匹配任何單個字符。例如正則表達式r.t匹配這些字符串:rat、rut、r t,但是不匹配root。 

* 匹配0或多個正好在它之前的那個字符。例如正則表達式。*意味着能夠匹配任意數量的任何字符。

所以在這里,這句話的意思就是匹配前后均有多個任意字符的LLL的情況或者是“多個任意字符+A+多個任意字符+A+多個任意字符”的情況

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM