[Buổi 21][Xử lý chuỗi][HW] Bài 1: Từ khóa nổi bật trong log
Từ khóa nổi bật trong log
Bối cảnh
Một hệ thống log nhận một dòng văn bản gồm nhiều token tách bởi whitespace. Trước khi thống kê, mọi token phải được chuyển về lowercase. Nhiệm vụ là tìm "từ khóa nổi bật" theo ba tiêu chí: tần suất lớn nhất; nếu hòa, token xuất hiện lần đầu sớm hơn; nếu vẫn hòa, token có thứ tự từ điển nhỏ hơn.
Bài không chỉ đếm frequency mà còn yêu cầu lưu first position. map<string,int> có thể giữ tần suất, còn một map khác lưu index xuất hiện đầu tiên. Sau khi tokenization xong, duyệt toàn bộ key để chọn best. Điểm Medium nằm ở tie-break: thứ tự key của map không tương đương thứ tự xuất hiện trong dòng. Pipeline đúng phải là đọc → tokenize → normalize → aggregate → select.
Để phân biệt đúng tie-break, hãy thử dữ liệu mà ba từ có cùng frequency nhưng xuất hiện lần đầu ở các vị trí khác nhau. Nếu code chỉ duyệt map rồi chọn key nhỏ nhất, kết quả sẽ sai. Việc lưu first[word] ngay ở lần gặp đầu vừa rẻ vừa làm rule lựa chọn minh bạch.
Yêu cầu
- Đọc một dòng.
- Tokenize theo whitespace bằng stringstream.
- Lowercase từng token.
- Tìm token theo frequency giảm → first index tăng → lexicographic tăng.
- In
word frequency firstIndex; nếu không có token inEMPTY.
Input
Một dòng văn bản.
Output
EMPTY hoặc một dòng word frequency firstIndex.
Ràng buộc
|line|≤5000.
Ví dụ 1
Input
Dev dev Cpp DEV
Output
dev 3 0
Giải thích
Sau lowercase, dãy token là dev dev cpp dev. Frequency: dev=3, cpp=1; first index của dev là 0. Vì frequency 3 lớn nhất tuyệt đối, từ khóa nổi bật là dev, output dev 3 0.
Ví dụ 2
Input
a b c a b c
Output
a 2 0
Giải thích
Ba token a,b,c đều xuất hiện hai lần. Frequency hòa nên xét first index: a lần đầu ở 0, b ở 1, c ở 2. Vì a xuất hiện sớm nhất, output a 2 0 dù map cũng duyệt lexicographic.
Thông tin học tập
- Module: M06
- Buổi: B21
- Loại bài: HOMEWORK
- Độ khó: Medium
- Concepts: stringstream, lowercase normalization, map frequency, first occurrence, tie-break
- Giới hạn kiến thức: B01-B21
- Time limit: 1 second(s)
- Memory limit: 256 MB
- Point: 100
Comments