LeetCode Student Attendance Record I学生出勤記録I


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

    学生の出勤記録を表す文字列を指定します.この記録には次の3つの文字しか含まれていません.
  • 'A':Absent,欠勤
  • 'L':Late、
  • 遅刻
  • 'P':Present,来場
  • 1人の学生の出勤記録の中で1つの'A'(欠勤)を超えず、2つの連続した'L'(遅刻)を超えない場合、この学生は奨励されます.
    この学生の出勤記録に基づいて、彼が賞を受けるかどうかを判断する必要があります.
    例1:
      : "PPALLP"
      : True
    

    例2:
      : "PPALLL"
      : False

    問題解:1つの文字列が与えられ、その文字列の中に1つのA(欠勤)を超えず、2つの連続したL(遅刻)を超えない場合、その学生は奨励されます.この問題は典型的な文字列の問題で、問題を手に入れると、遍歴すると時間がかかるので、正規表現で解決できるかどうか考えられます.タイトルによると、文字列の中で1つのA(欠勤)を超えず、2つの連続したL(遅刻)を超えない場合、奨励されます.逆に、この文字列に2つ以上のAがある場合や、2つ以上の連続するL(遅刻)がある場合は、奨励されません.したがって、この考え方を探すと、まず正規表現で文字列のサブ列に連続する3つ以上のL(遅刻)が存在するかどうかを探すことができる.または、その文字列に2つ以上のAがあるかどうかを検索します.しかし、ここで穴に出会ったのは、Stringを直接使うことです.matches()をマッチングするにはfalseが表示され、その後、Stringまで資料を検索します.matches()この方法は文字列全体に一致するしかなく、文字列のサブ列に一致することはできません.だから、ここではStringは使えません.matches()メソッドは,PatternとMatcherのみで実現できる.
    1.マッチング連続の3つ以上のL(遅刻)に対して
    Pattern p1 = Pattern.compile("(LLL)+");
    Matcher m1 = p1.matcher(s);
    if(m1.find())
        return false;
    

    1つの文字列およびサブストリングのうちの3つ以上を一致するLを表す、m 1.find()を使用して、正規一致に一致する文字列が存在するかどうかを検索します.
    2、文字列にAが2つ以上現れる場合
    これは文字列に現れるAを探しているので、ここではfindを使うことはできません.findは一度だけ探しているので、二度目を探す責任はありません.具体的な出現回数を探すには、whileループでその正則マッチングを満たす出現回数を探さなければなりません.
        public static boolean checkRecord(String s)
        {
            if(s == null)
                return true;
            Pattern p1 = Pattern.compile("(LLL)+");
            Matcher m1 = p1.matcher(s);
            if(m1.find())
                return false;
            Pattern p2 = Pattern.compile("A");
            Matcher m2 = p2.matcher(s);
            int sum = 0;
            while(m2.find())
            {
                sum++;
                if(sum >= 2)
                    return false;
            }
            return true;
        }