Mô tả
Hệ thống theo dõi sức khỏe Podetri thu thập dữ liệu từ các cảm biến trên đồng hồ thông minh. Các cảm biến này liên tục gửi về các sự kiện dạng mã hóa, ví dụ "step", "idle", "heart_high". Tuy nhiên, do cảm biến có tần số quét rất cao, một hoạt động kéo dài (như đang đi bộ liên tục) sẽ sinh ra rất nhiều sự kiện giống hệt nhau liên tiếp, gây lãng phí băng thông truyền tải và làm nhiễu dữ liệu phân tích.
Đội ngũ kỹ sư Podetri muốn bạn viết một bộ lọc tự động: nhận vào danh sách các sự kiện theo đúng thứ tự thời gian thu nhận, và trả về danh sách đã được rút gọn — trong đó mọi nhóm sự kiện giống nhau xuất hiện liền nhau chỉ còn lại đúng một đại diện. Thứ tự ban đầu của các sự kiện khác nhau phải được giữ nguyên.
Đầu vào
events: một danh sách (mảng) các chuỗi ký tự, mỗi chuỗi là một mã sự kiện do cảm biến gửi về.
Đầu ra
- Trả về một danh sách các chuỗi theo thứ tự thời gian, đã lược bỏ mọi sự kiện trùng lặp liền kề.
Ràng buộc
- Số lượng sự kiện:
1 <= n <= 10^5. - Mỗi mã sự kiện là chuỗi ký tự không chứa khoảng trắng, độ dài từ 1 đến 30 ký tự.
Ví dụ
Ví dụ 1:
Đầu vào: ["step", "step", "idle", "step", "heart_high"]
Giải thích từng bước:
- "step" đầu tiên được giữ lại vì chưa có sự kiện nào trước nó.
- "step" thứ hai bị loại do trùng liền kề với sự kiện ngay trước.
- "idle" được giữ (khác với sự kiện liền trước là "step").
- "step" thứ ba được giữ (khác với sự kiện liền trước là "idle").
- "heart_high" được giữ (khác với sự kiện liền trước là "step").
Đầu ra: ["step", "idle", "step", "heart_high"]
Ví dụ 2:
Đầu vào: ["alert", "alert", "alert", "alert"]
Giải thích: Tất cả bốn sự kiện đều giống nhau và nằm liền nhau, nên chỉ giữ lại một đại diện duy nhất.
Đầu ra: ["alert"]