学生出勤记录I Leetcode解决方案


难度级别 易得奖学金
经常问 谷歌

问题陈述

在“学生出勤记录I”问题中,我们得到了一个 绳子 每个字母代表学生的出勤详细信息。 字符串中字母的解释如下:

  1. “ A”表示不存在。
  2. “ P”表示存在。
  3. “ L”表示迟到

如果学生缺勤超过一天或连续两天不迟到,将根据其出勤率给予奖励。 我们的任务是确定学生是否会得到奖励。

使用案列

str="PPALLP"
true

说明:

学生出勤记录I Leetcode解决方案

由于学生缺勤时间不超过一天,并且连续缺席时间不超过两天,因此必须给予奖励。

学生出勤记录I Leetcode解决方案的方法

实施

这是一个基本的实现问题。 我们需要找出学生是否会得到奖励。 因此,为了奖励学生,我们需要检查他是否缺勤超过一天,并且连续不超过两天不迟到。 我们将按照以下步骤执行此检查:

  1. 初始化“ A”计数和“ L”计数的数目为零
  2. 遍历完整的字符串。
    1. 如果当前字符为“ A”,则将“ A”的计数加一。
    2. 如果当前字符为“ L”,则将“ L”的计数加一。
    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 Leetcode解决方案的复杂性分析

时间复杂度

上面代码的时间复杂度是 O(N) 因为我们只遍历字符串一次。 这里n是给定字符串的长度。

空间复杂度

上面代码的空间复杂度是 O(1) 因为我们只使用一个变量来存储答案。

參考資料