Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Đếm mức độ log

Đọc các dòng của một tệp log và đếm xem có bao nhiêu dòng là INFO, WARNING và ERROR.

Bạn sẽ học được gì

  • Xử lý file theo từng dòng
  • Lấy từ đầu tiên của một dòng
  • Đếm các nhóm bằng một bảng đếm nhỏ

Đề bài

Xem bản gốc (English)

Chương trình ghi log vào các tệp log với một sự kiện trên mỗi dòng. Mỗi dòng bắt đầu bằng một từ mức độ, sau đó là một khoảng trắng và một thông điệp, ví dụ ERROR disk full.

Cho các dòng của một tệp log, hãy đếm những dòng có từ đầu tiên chính xác là INFO, WARNING hoặc ERROR. Những dòng bắt đầu bằng bất kỳ thứ gì khác (bao gồm cả các mức viết thường) đều bị bỏ qua.

Implement count_log_levels(lines).

Đầu vào

lines: Các dòng của tệp, không có ký tự xuống dòng.

Đầu ra

Trả về [info_count, warning_count, error_count].

Ràng buộc

0 ≤ số dòng ≤ 10,000

Mỗi dòng có tối đa 200 ký tự

Ví dụ

Ví dụ 1
Đầu vào:
lines = ["INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"]

Kết quả mong đợi:
expected = [2, 1, 1]
Đầu vào:
std::vector<std::string> lines = {"INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"};

Kết quả mong đợi:
std::vector<long long> expected = {2, 1, 1};
Đầu vào:
string[] lines = new string[] {"INFO server started", "ERROR disk full", "INFO user login", "WARNING slow query"};

Kết quả mong đợi:
long[] expected = new long[] {2, 1, 1};

Giải thích

Hai dòng bắt đầu bằng INFO, một dòng bằng WARNING và một dòng bằng ERROR: [2, 1, 1].

Ví dụ 2
Đầu vào:
lines = ["info lowercase", "DEBUG details", "ERROR"]

Kết quả mong đợi:
expected = [0, 0, 1]
Đầu vào:
std::vector<std::string> lines = {"info lowercase", "DEBUG details", "ERROR"};

Kết quả mong đợi:
std::vector<long long> expected = {0, 0, 1};
Đầu vào:
string[] lines = new string[] {"info lowercase", "DEBUG details", "ERROR"};

Kết quả mong đợi:
long[] expected = new long[] {0, 0, 1};

Giải thích

"info" không phải "INFO" và DEBUG không được tính. Dòng cuối chỉ có chữ ERROR nên được tính: [0, 0, 1].

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Chỉ từ đầu tiên của mỗi dòng là quan trọng.

Gợi ý 2

Tách một lần tại khoảng trắng đầu tiên rồi so sánh chính xác từ đó.

Gợi ý 3

Phân biệt hoa thường: "info" khác "INFO", và một dòng có thể chỉ có từ mức độ.

Độ phức tạp mong đợi

thời gian O(tổng độ dài), bộ nhớ phụ O(1)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.