Đề bài
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ụ
Đầ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].
Đầ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.