โจทย์
โปรแกรมมักรับ JSON เช่น {"apples": 3, "pears": 5} ไลบรารีอย่าง System.Text.Json ช่วยแปลงให้ได้ แต่การลองเขียนกรณีง่าย ๆ เองจะช่วยให้เข้าใจรูปแบบของข้อมูลมากขึ้น
อินพุตเป็นอ็อบเจ็กต์ JSON แบบแบน: { จากนั้นเป็นคู่ "key": value ตั้งแต่ศูนย์คู่ขึ้นไป โดยคั่นกันด้วยเครื่องหมายจุลภาค แล้วปิดด้วย } คีย์อยู่ในเครื่องหมายอัญประกาศและไม่มีเครื่องหมายอัญประกาศ เครื่องหมายจุลภาค หรือโคลอน; ค่าเป็นจำนวนเต็มและอาจเป็นลบได้ อาจมีช่องว่างอยู่รอบ ๆ สัญลักษณ์ต่าง ๆ
Implement sum_json_numbers(text).
Input
text: อ็อบเจ็กต์ JSON
Output
Return the sum of all values (0 for an empty object).
เงื่อนไข
2 ≤ ความยาวข้อความ ≤ 100,000
ไม่เกิน 10,000 คู่ ทุกค่าและผลรวมอยู่ในช่วงจำนวนเต็ม 64 บิต
ตัวอย่าง
อินพุต:
text = "{\"apples\": 3, \"pears\": 5}"
ผลลัพธ์ที่คาดหวัง:
expected = 8
อินพุต:
std::string text = "{\"apples\": 3, \"pears\": 5}";
ผลลัพธ์ที่คาดหวัง:
long long expected = 8;
อินพุต:
string text = "{\"apples\": 3, \"pears\": 5}";
ผลลัพธ์ที่คาดหวัง:
long expected = 8;
คำอธิบาย
3 + 5 = 8.
อินพุต:
text = "{ \"debt\" : -20 , \"cash\":15 }"
ผลลัพธ์ที่คาดหวัง:
expected = -5
อินพุต:
std::string text = "{ \"debt\" : -20 , \"cash\":15 }";
ผลลัพธ์ที่คาดหวัง:
long long expected = -5;
อินพุต:
string text = "{ \"debt\" : -20 , \"cash\":15 }";
ผลลัพธ์ที่คาดหวัง:
long expected = -5;
คำอธิบาย
ช่องว่างรอบสัญลักษณ์ไม่มีผล: −20 + 15 = −5
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
เอาวงเล็บปีกกาออก แล้วแยกคู่ที่จุลภาค
คำใบ้ 2
ค่าคือข้อความหลังโคลอน ตัดช่องว่างก่อนแปลง
คำใบ้ 3
ใช้จำนวนเต็ม 64 บิต และคืน 0 สำหรับออบเจกต์ว่าง
ความซับซ้อนที่คาดหวัง
เวลา O(ความยาวข้อความ), หน่วยความจำเพิ่ม O(1)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน