Problème
Les programmes reçoivent souvent du JSON comme {"apples": 3, "pears": 5}. Des bibliothèques comme System.Text.Json l’analysent pour vous, mais traiter un cas simple à la main montre comment le format fonctionne.
L’entrée est un objet JSON plat : {, puis zéro ou plusieurs paires "key": value séparées par des virgules, puis }. Les clés sont entre guillemets et ne contiennent ni guillemets, ni virgules, ni deux-points ; les valeurs sont des entiers, éventuellement négatifs. Des espaces peuvent apparaître autour de n’importe lequel des symboles.
Implémentez sum_json_numbers(text).
Input
text: L’objet JSON.
Output
Retournez la somme de toutes les valeurs (0 pour un objet vide).
Contraintes
2 ≤ longueur du texte ≤ 100,000
Au plus 10,000 paires ; chaque valeur et la somme tiennent dans un entier 64 bits
Exemples
Entrée :
text = "{\"apples\": 3, \"pears\": 5}"
Sortie attendue :
expected = 8
Entrée :
std::string text = "{\"apples\": 3, \"pears\": 5}";
Sortie attendue :
long long expected = 8;
Entrée :
string text = "{\"apples\": 3, \"pears\": 5}";
Sortie attendue :
long expected = 8;
Explication
3 + 5 = 8.
Entrée :
text = "{ \"debt\" : -20 , \"cash\":15 }"
Sortie attendue :
expected = -5
Entrée :
std::string text = "{ \"debt\" : -20 , \"cash\":15 }";
Sortie attendue :
long long expected = -5;
Entrée :
string text = "{ \"debt\" : -20 , \"cash\":15 }";
Sortie attendue :
long expected = -5;
Explication
Les espaces autour des symboles n’ont pas d’importance : −20 + 15 = −5.
Comment l'aborder
Essayez d'abord seul, puis ouvrez les indices un par un.
Indice 1
Retirez les accolades, puis coupez les paires aux virgules.
Indice 2
Chaque valeur est le texte après les deux-points ; retirez les espaces avant de convertir.
Indice 3
Utilisez un entier 64 bits et renvoyez 0 pour un objet vide.
Complexité attendue
temps O(longueur du texte), espace supplémentaire O(1)
Références
Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.