Đề bài
Các chương trình thường nhận JSON như {"apples": 3, "pears": 5}. Các thư viện như System.Text.Json sẽ phân tích nó cho bạn, nhưng tự xử lý một trường hợp đơn giản sẽ giúp hiểu định dạng này hoạt động như thế nào.
Dữ liệu vào là một đối tượng JSON phẳng: {, rồi đến không hoặc nhiều cặp "key": value được ngăn cách bởi dấu phẩy, rồi đến }. Các khóa được đặt trong dấu ngoặc kép và không chứa dấu ngoặc kép, dấu phẩy hoặc dấu hai chấm; các giá trị là số nguyên, có thể âm. Có thể có khoảng trắng quanh bất kỳ ký hiệu nào.
Hãy cài đặt sum_json_numbers(text).
Input
text: Đối tượng JSON.
Output
Trả về tổng của tất cả các giá trị (0 cho một đối tượng rỗng).
Ràng buộc
2 ≤ độ dài chuỗi ≤ 100,000
Tối đa 10,000 cặp; mọi giá trị và tổng đều vừa với số nguyên 64-bit
Ví dụ
Đầu vào:
text = "{\"apples\": 3, \"pears\": 5}"
Kết quả mong đợi:
expected = 8
Đầu vào:
std::string text = "{\"apples\": 3, \"pears\": 5}";
Kết quả mong đợi:
long long expected = 8;
Đầu vào:
string text = "{\"apples\": 3, \"pears\": 5}";
Kết quả mong đợi:
long expected = 8;
Giải thích
3 + 5 = 8.
Đầu vào:
text = "{ \"debt\" : -20 , \"cash\":15 }"
Kết quả mong đợi:
expected = -5
Đầu vào:
std::string text = "{ \"debt\" : -20 , \"cash\":15 }";
Kết quả mong đợi:
long long expected = -5;
Đầu vào:
string text = "{ \"debt\" : -20 , \"cash\":15 }";
Kết quả mong đợi:
long expected = -5;
Giải thích
Khoảng trắng quanh các ký hiệu không ảnh hưởng: −20 + 15 = −5.
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Bỏ cặp ngoặc nhọn rồi tách các cặp tại dấu phẩy.
Gợi ý 2
Mỗi giá trị là phần sau dấu hai chấm; cắt khoảng trắng trước khi đổi kiểu.
Gợi ý 3
Dùng số nguyên 64-bit và trả 0 cho đối tượng rỗng.
Độ phức tạp mong đợi
thời gian O(độ dài chuỗ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.