2017-11-29 1 views
-1

学生の出席記録を表す文字列が与えられています。彼の出席の記録は、複数の「A」(不在)を含有するか、二つ以上の連続した「L」(後半)しない場合、学生が報われる可能性が誰でも私に以下の行を理解させる助けになるか、それ以外の解決策を提案することができます

'A' : Absent. 
'L' : Late. 
'P' : Present. 

:レコードが唯一、次の3つの文字が含まれています。

あなたは出席記録に従って報酬を受けることができるかどうかを返す必要があります。

class Solution { 

     public boolean checkRecord(String s) { 
      return !s.matches(".*LLL.*|.*A.*A.*"); //(At this line) 
     } 
    } 

私はこの行を正確にやっていることを理解してください。

おかげ

+0

これは正規表現と呼ばれています。しかし、理解していない他の人のソリューションをコピーしたくない場合もあります(たとえば、教授がそれについて質問した場合) –

答えて

0

これは正規表現(正規表現)と呼ばれています。

正規表現は、「パターン」を表すものです。このパターンに対して文字列をチェックし、文字列が一致するかどうかを確認できます。ここで

、正規表現は次のとおりです。

.*LLL.*|.*A.*A.* 

説明:

右バットオフあなたは途中で|を参照してください。それはorのようなものです。これは、.*LLL.*または.*A.*A.*と一致することを意味します。

.*は、あなたが期待するよう

LLLだけで、3つの連続L Sに一致するラインターミネータを除いて0以上の任意の文字に一致します。

AAと一致します。

全体的に、この正規表現は、学生が授与されるべきでない状況に合致します。戻り値の先頭にある!はそれを否定します。したがって、文字列がパターンに一致する場合はfalseが返され、逆の場合も同様です。ここにあなたのへ

Goが正規表現と周りの混乱にしたい:ここhttps://regex101.com/r/ZiIMkq/1

は別のソリューションです:

public boolean checkRecord(String s) { 
    if (s.contains("LLL")) { // check consecutive lates 
     return false; 
    } 

    int absentCount = 0; 
    for (int i = 0 ; i < s.length() ; i++) { // loop through to count number of A's 
     if (s.charAt(i) == 'A') { 
      absentCount++; 
      if (absentCount >= 2) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 
0

後期場合 - 文字列中の連続> 3「LLL」、それはそれと一致しましたそれで条件は真です。

文字列に "A"が2つ以上存在しない場合は、その文字列と一致するので、条件が真となります。

上記の両方の条件の場合return !s.matches(".*LLL.*|.*A.*A.*"); - >これはfalseを返します。

それ以外の場合はtrueを返します。

ここで "|"後期または不在のいずれかを表します。

0

checkRecord()機能は、渡された値sに対して(一般に「正規表現」と呼ばれる)は、JavaのString.matchregular expressionを使用しているあなたは、その部品のいくつかを理解する必要があります。この正規表現文字列を解読しやすくするために:。

  • .は任意の文字を意味し、*はワイルドカードです。したがって、.*を意味するは、すべての文字を検索します。
  • LLLは、式の最初の部分にある唯一のリテラル文字列です。 .*LLL.*は、を意味し、任意の数の任意の文字で囲まれた「LLL」を見つける。
  • |は、あなたはおそらく.*A.*A.*を見つけるだろうかを把握することができます上記を使用したり、オペレータ

です。式をどのように作成するかを理解したら、学習するのに役立つregex testersがあります。 |

0

スイーパーはすでにのでかなりよく

私は入力に焦点を当てます

String input = "APLPPPLLPPPLPA"; 
boolean record = checkRecord(input); 
System.out.println(record); //false 

をそれに答えまたは、我々は|

.*は任意のシンボルを意味するので、そのままそのまま残します。次に、LAのまわりに角括弧を入れます。

最初は.*LLL.*

AP [L] PPP [LL] PPP [L] PA

を見てみましょう3 L'sは行に来Stringで発生ありましたか?ノー

.*A.*A.*

[A] PLPPPLLPPPLP [A]

がランダムな記号が続く Aが現れ発生は、その後、 Aであったのか、なかったを見てみましょう Aの直後に Aが来ますか?はい、両方のAの間にランダムな記号があったため、2つのAがあることを確認しました

関連する問題