Đề bài
Đếm số lần xuất hiện của từng ký tự trong text, ngoại trừ dấu cách. Báo cáo mỗi ký tự khác nhau một lần dưới dạng "ký tự:số lần", sắp xếp theo mã ký tự (chữ hoa trước chữ thường).
Cài đặt hàm character_frequency(text).
Đầu vào
text: Chuỗi cần đếm (ký tự ASCII).
Đầu ra
Trả về danh sách các mục "ký tự:số lần".
Ràng buộc
0 ≤ độ dài ≤ 10.000
Ví dụ
Đầu vào:
text = "hello"
Kết quả mong đợi:
expected = ["e:1", "h:1", "l:2", "o:1"]
Đầu vào:
std::string text = "hello";
Kết quả mong đợi:
std::vector<std::string> expected = {"e:1", "h:1", "l:2", "o:1"};
Đầu vào:
string text = "hello";
Kết quả mong đợi:
string[] expected = new string[] {"e:1", "h:1", "l:2", "o:1"};
Giải thích
e:1, h:1, l:2, o:1 được sắp xếp theo ký tự: ["e:1", "h:1", "l:2", "o:1"].
Đầu vào:
text = "a a A"
Kết quả mong đợi:
expected = ["A:1", "a:2"]
Đầu vào:
std::string text = "a a A";
Kết quả mong đợi:
std::vector<std::string> expected = {"A:1", "a:2"};
Đầu vào:
string text = "a a A";
Kết quả mong đợi:
string[] expected = new string[] {"A:1", "a:2"};
Giải thích
Dấu cách bị bỏ qua; "A" được sắp xếp trước "a": ["A:1", "a:2"].
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Bỏ qua khoảng trắng, nhưng đếm chính xác mọi ký tự ASCII khác như nó xuất hiện.
Gợi ý 2
Cộng dồn vào bảng tần suất, rồi xuất mỗi ký tự duy nhất một lần.
Gợi ý 3
Sắp xếp theo mã ký tự để thứ tự chữ hoa/chữ thường tự theo ASCII.
Độ phức tạp mong đợi
thời gian O(n + m log m), bộ nhớ phụ O(m)
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.