Запис відвідувачів студентів I Рішення з використанням Леткоду


Рівень складності Легко
Часто запитують у Google
рядок

Постановка проблеми

У задачі "Запис відвідувачів студентів I" нам дано a рядок де кожен лист представляє дані відвідуваності студента. Інтерпретація літер у рядку така:

  1. "А" означає відсутність.
  2. "P" означає присутність.
  3. "L" означає запізнення

Студент отримуватиме винагороду на основі відвідуваності, якщо він не буде відсутній більше одного дня або не запізнюється безперервно більше двох днів. Наше завдання - визначити, буде студент винагороджений чи ні.

Приклад

str="PPALLP"
true

Пояснення:

Запис відвідувачів студентів I Рішення з використанням Леткоду

Оскільки студент не відсутній більше одного дня і не запізнюється постійно більше двох днів, тому він повинен бути винагороджений.

Підхід до записів відвідуваності студентів I Рішення Leetcode

Реалізація

Це основна проблема реалізації. Потрібно з’ясувати, буде студент винагороджений чи ні. Отже, щоб нагородити студента, нам потрібно перевірити, чи він не відсутній більше одного дня і не запізнюється безперервно більше двох днів. Для виконання цієї перевірки ми виконаємо такі дії:

  1. Ініціалізуйте кількість рахунків "A" і "L", дорівнюючи нулю
  2. Перейти повний рядок.
    1. Якщо поточним символом є "А", то збільште кількість "А" на одиницю.
    2. Якщо поточним символом є "L", то збільште кількість "L" на одиницю.
    3. В іншому випадку кількість «L» стає нульовою.
    4. Тепер перевірте, чи підрахунок «A» більше або дорівнює 2, або підрахунок «L» перевищує 2. Якщо умова true, поверніть false.
  3. Зрештою, якщо всі умови виконуються, поверніть істину.

Код С ++ для запису відвідуваності студентів I

#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

Код Java для запису відвідуваності студентів I

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

Часова складність

Часова складність вищевказаного коду становить О (п) тому що ми обходимо рядок лише один раз. Тут n - довжина заданого рядка.

Космічна складність

Складність простору наведеного коду становить O (1) тому що ми використовуємо лише змінну для зберігання відповіді.

посилання