Description
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: "PPALLP"
Output: True
Solution 1(C++)
class Solution {
public:
bool checkRecord(string s) {
int a=0, l=0;
for(int i=0;i<s.size();i++) {
if(s[i]=='A') a++;
if(s[i]=='L') l++;
else l=0;
if(a>=2||l>2) return false;
}
return true;
}
};
Solution 2(C++)
class Solution {
public:
bool checkRecord(string s) {
return !regex_match(s, regex(".*LLL.*|.*A.*A.*"));
}
};
算法分析
解法二主要是使用正则表达式解决的,耗时很长,写在这里也就是仅当欣赏。
主要是解法一,突然发现计算一个字符串某个连续相同字符出现的次数的方法,可看程序分析。
程序分析
for(int i=0; i<s.size(); i++){
if(s[i]='L') num++;
else num=0; //这个else很关键啊。
}