Đề bài
Mẫu singleton đảm bảo một lớp chỉ có đúng một thể hiện mà mọi người cùng dùng chung, một lựa chọn phổ biến cho thiết lập ứng dụng.
Hãy mô phỏng một cấu hình dùng chung bắt đầu rỗng. Xử lý các thao tác theo thứ tự:
set <key> <value>: lưu giá trị cho khóa (thay thế mọi giá trị cũ).get <key>: đọc giá trị hiện tại của khóa, hoặcmissingnếu khóa đó chưa từng được đặt.
Vì mọi lời gọi đều dùng cùng một thể hiện, nên giá trị do một thao tác đặt ra sẽ hiển thị với mọi get ở sau đó.
Hãy cài đặt shared_configuration(operations).
Input
operations: Các chuỗi theo hai dạng ở trên. Khóa và giá trị không chứa khoảng trắng.
Output
Trả về kết quả của các thao tác get, theo thứ tự.
Ràng buộc
1 ≤ số thao tác ≤ 10,000
Khóa và giá trị dài 1 đến 20 ký tự
Ví dụ
Đầu vào:
operations = ["set theme dark", "get theme", "get language"]
Kết quả mong đợi:
expected = ["dark", "missing"]
Đầu vào:
std::vector<std::string> operations = {"set theme dark", "get theme", "get language"};
Kết quả mong đợi:
std::vector<std::string> expected = {"dark", "missing"};
Đầu vào:
string[] operations = new string[] {"set theme dark", "get theme", "get language"};
Kết quả mong đợi:
string[] expected = new string[] {"dark", "missing"};
Giải thích
theme được đặt là dark; language chưa bao giờ được đặt nên là missing: ["dark", "missing"].
Đầu vào:
operations = ["set lang en", "set lang vi", "get lang"]
Kết quả mong đợi:
expected = ["vi"]
Đầu vào:
std::vector<std::string> operations = {"set lang en", "set lang vi", "get lang"};
Kết quả mong đợi:
std::vector<std::string> expected = {"vi"};
Đầu vào:
string[] operations = new string[] {"set lang en", "set lang vi", "get lang"};
Kết quả mong đợi:
string[] expected = new string[] {"vi"};
Giải thích
Lệnh set thứ hai thay giá trị đầu tiên trong cùng một instance dùng chung: ["vi"].
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Mọi thao tác đều đọc và ghi cùng một đối tượng duy nhất.
Gợi ý 2
Một dictionary từ khóa sang giá trị là đủ để lưu cấu hình.
Gợi ý 3
Khóa chưa từng được đặt phải trả về chữ missing.
Độ phức tạp mong đợi
thời gian O(số thao tác), bộ nhớ phụ O(số khóa)
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.