LeetCode 551題
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.
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+多個任意字符”的情況