ບັນທຶກການເຂົ້າຮ່ວມຂອງນັກຮຽນ I Leetcode Solution


ລະດັບຄວາມຫຍຸ້ງຍາກ Easy
ຖາມເລື້ອຍໆໃນ ກູໂກ
string

ບັນຫາບັນຫາ

ໃນບັນຫາ” ບັນທຶກການເຂົ້າຮຽນຂອງນັກຮຽນ I” ພວກເຮົາແມ່ນກ string ບ່ອນທີ່ແຕ່ລະຈົດ ໝາຍ ສະແດງລາຍລະອຽດການເຂົ້າຮຽນຂອງນັກຮຽນ. ການຕີຄວາມ ໝາຍ ຂອງຕົວອັກສອນໃນສາຍແມ່ນມີດັ່ງນີ້:

  1. 'A' ຫມາຍຄວາມວ່າບໍ່ມີ.
  2. 'P' ໝາຍ ຄວາມວ່າປະຈຸບັນ.
  3. 'L' ໝາຍ ຄວາມວ່າຊ້າ

ນັກຮຽນຈະໄດ້ຮັບລາງວັນໂດຍອີງຕາມການເຂົ້າຮຽນຂອງລາວຖ້າລາວບໍ່ໄດ້ພັກຫຼາຍກວ່າ ໜຶ່ງ ມື້ຫຼືບໍ່ຊ້າຕໍ່ເນື່ອງເປັນເວລາຫຼາຍກວ່າສອງມື້. ວຽກງານຂອງພວກເຮົາແມ່ນເພື່ອ ກຳ ນົດວ່ານັກຮຽນຈະໄດ້ຮັບລາງວັນຫຼືບໍ່.

ຍົກຕົວຢ່າງ

str="PPALLP"
true

ຄໍາອະທິບາຍ:

ບັນທຶກການເຂົ້າຮ່ວມຂອງນັກຮຽນ I Leetcode Solution

ເນື່ອງຈາກວ່ານັກຮຽນບໍ່ໄດ້ຂາດເວລາຫຼາຍກວ່າ ໜຶ່ງ ມື້ແລະບໍ່ຊັກຊ້າຢ່າງຕໍ່ເນື່ອງເປັນເວລາຫຼາຍກວ່າສອງມື້ດັ່ງນັ້ນລາວຕ້ອງໄດ້ຮັບລາງວັນ.

ວິທີການ ສຳ ລັບບັນທຶກການເຂົ້າຮຽນຂອງນັກຮຽນ I Leetcode Solution

ການປະຕິບັດ

ນີ້ແມ່ນບັນຫາການຈັດຕັ້ງປະຕິບັດຂັ້ນພື້ນຖານ. ພວກເຮົາຕ້ອງຊອກຮູ້ວ່ານັກຮຽນຈະໄດ້ຮັບລາງວັນຫຼືບໍ່. ສະນັ້ນເພື່ອໃຫ້ລາງວັນແກ່ນັກສຶກສາພວກເຮົາ ຈຳ ເປັນຕ້ອງກວດສອບວ່າລາວບໍ່ໄດ້ພັກເກີນ XNUMX ວັນແລະບໍ່ຊ້າຕໍ່ເນື່ອງເປັນເວລາຫຼາຍກວ່າສອງມື້. ພວກເຮົາຈະປະຕິບັດຕາມຂັ້ນຕອນເຫຼົ່ານີ້ເພື່ອ ດຳ ເນີນການກວດສອບນີ້:

  1. ເລີ່ມຕົ້ນ ຈຳ ນວນ 'A' ນັບແລະ 'L' ນັບເລກສູນ
  2. ຂ້າມສາຍເຊືອກທີ່ສົມບູນ.
    1. ຖ້າຕົວອັກສອນປະຈຸບັນແມ່ນ 'A' ແລ້ວເພິ່ມ ຈຳ ນວນ 'A' ເພີ່ມຂື້ນ XNUMX ຕົວ.
    2. ຖ້າຕົວອັກສອນປະຈຸບັນແມ່ນ 'L' ແລ້ວເພີ່ມ ຈຳ ນວນ 'L' ຂຶ້ນ ໜຶ່ງ ຕົວເລກ.
    3. ຖ້າບໍ່ດັ່ງນັ້ນ, ການນັບ 'L' ກາຍເປັນເລກສູນ.
    4. ດຽວນີ້ໃຫ້ກວດເບິ່ງວ່າການນັບຂອງ 'A' ແມ່ນໃຫຍ່ກວ່າຫຼືເທົ່າກັບ 2 ຫຼືການນັບຂອງ 'L' ແມ່ນໃຫຍ່ກວ່າ 2 ຖ້າວ່າສະພາບການເປັນຈິງກັບຄືນບໍ່ຖືກຕ້ອງ.
  3. ໃນທີ່ສຸດ, ຖ້າເງື່ອນໄຂທັງ ໝົດ ພໍໃຈແລ້ວກໍ່ກັບມາເປັນຄວາມຈິງ.

ລະຫັດ C ++ ສຳ ລັບບັນທຶກການເຂົ້າຮຽນຂອງນັກຮຽນ 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 Solution

ຄວາມສັບສົນເວລາ

ຄວາມສັບສົນຂອງເວລາຂອງລະຫັດຂ້າງເທິງແມ່ນ O (n) ເພາະວ່າພວກເຮົາ ກຳ ລັງຜ່ານເຊືອກດຽວເທົ່ານັ້ນ. ນີ້ n ແມ່ນຄວາມຍາວຂອງສາຍສະຕິງທີ່ໃຫ້.

ຄວາມສັບສົນໃນອະວະກາດ

ຄວາມສັບສົນໃນພື້ນທີ່ຂອງລະຫັດຂ້າງເທິງແມ່ນ O (1) ເພາະວ່າພວກເຮົາ ກຳ ລັງໃຊ້ຕົວແປເພື່ອເກັບ ຄຳ ຕອບ.

ເອກະສານ