学生の出席記録Iリートコードソリューション


難易度 簡単に
よく聞かれる Googleポリシー
文字列

問題文

問題「学生出席記録I」では、 文字列 ここで、各文字は学生の出席の詳細を表します。 文字列内の文字の解釈は次のとおりです。

  1. 「A」は不在を意味します。
  2. 「P」は存在を意味します。
  3. 「L」は遅いことを意味します

欠席がXNUMX日を超えない場合、またはXNUMX日を超えて継続的に遅れない場合、学生は出席に基づいて報酬を受け取ります。 私たちの仕事は、学生が報われるかどうかを決定することです。

str="PPALLP"
true

説明:

学生の出席記録Iリートコードソリューション

学生はXNUMX日以上欠席せず、XNUMX日以上継続して遅刻しないため、報奨を受ける必要があります。

学生の出席記録Iリートコードソリューションへのアプローチ

製品の導入

これは基本的な実装の問題です。 学生に報酬が与えられるかどうかを確認する必要があります。 したがって、学生に報酬を与えるには、学生がXNUMX日以上欠席していないか、XNUMX日以上継続して遅れていないかを確認する必要があります。 このチェックを実行するには、次の手順に従います。

  1. 「A」カウントと「L」カウントの数をゼロで初期化します
  2. 文字列全体をトラバースします。
    1. 現在の文字が「A」の場合は、「A」のカウントをXNUMXつ増やします。
    2. 現在の文字が「L」の場合は、「L」のカウントをXNUMXつ増やします。
    3. それ以外の場合、「L」のカウントはゼロになります。
    4. ここで、「A」のカウントが2以上であるか、「L」のカウントが2より大きいかを確認します。条件がtrueの場合、falseを返します。
  3. 最終的に、すべての条件が満たされた場合はtrueを返します。

学生出席記録IのC ++コード

#include <bits/stdc++.h> 
using namespace std; 
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;
}

int main() 
{ 
    string attendence ="PPALLP"; 
    bool ans=checkRecord(attendence); 
    cout<<boolalpha;
    cout<<ans<<endl;
    return 0;
}
true

学生出席記録IのJavaコード

import java.util.Arrays;
import java.util.Set ;
import java.util.HashSet;
import java.util.*; 
public class Tutorialcup {
    public static boolean checkRecord(String s) {
    int a=0, l=0;
    for(int i=0;i<s.length();i++) {
        if(s.charAt(i)=='A') a++;
        if(s.charAt(i)=='L') l++;
        else l=0;
        if(a>=2||l>2) return false;
    }
    return true; 
    }
  public static void main(String[] args) {
        String attendence ="PPALLP"; 
        boolean ans=checkRecord(attendence); 
        System.out.println(ans);
  }
}
true

学生の出席記録の複雑さの分析Iリートコードソリューション

時間の複雑さ

上記のコードの時間計算量は O(N) 文字列をXNUMX回だけトラバースしているためです。 ここで、nは指定された文字列の長さです。

スペースの複雑さ

上記のコードのスペースの複雑さは O(1) 回答を格納するために変数のみを使用しているためです。

リファレンス