Problema
I programmi ricevono spesso JSON come {"apples": 3, "pears": 5}. Librerie come System.Text.Json lo analizzano per te, ma analizzare a mano un caso semplice mostra come funziona il formato.
L'input è un oggetto JSON piatto: {, poi zero o più coppie "key": value separate da virgole, poi }. Le chiavi sono tra virgolette e non contengono virgolette, virgole o due punti; i valori sono interi, possibilmente negativi. Gli spazi possono comparire attorno a qualsiasi simbolo.
Implementa sum_json_numbers(text).
Input
text: L'oggetto JSON.
Output
Restituisci la somma di tutti i valori (0 per un oggetto vuoto).
Vincoli
2 ≤ lunghezza del testo ≤ 100,000
Al massimo 10,000 coppie; ogni valore e la somma stanno in un intero a 64 bit
Esempi
Input:
text = "{\"apples\": 3, \"pears\": 5}"
Output atteso:
expected = 8
Input:
std::string text = "{\"apples\": 3, \"pears\": 5}";
Output atteso:
long long expected = 8;
Input:
string text = "{\"apples\": 3, \"pears\": 5}";
Output atteso:
long expected = 8;
Spiegazione
3 + 5 = 8.
Input:
text = "{ \"debt\" : -20 , \"cash\":15 }"
Output atteso:
expected = -5
Input:
std::string text = "{ \"debt\" : -20 , \"cash\":15 }";
Output atteso:
long long expected = -5;
Input:
string text = "{ \"debt\" : -20 , \"cash\":15 }";
Output atteso:
long expected = -5;
Spiegazione
Gli spazi attorno ai simboli non contano: −20 + 15 = −5.
Come affrontarlo
Prova prima da solo, poi apri un suggerimento alla volta.
Suggerimento 1
Togli le graffe, poi dividi le coppie alle virgole.
Suggerimento 2
Ogni valore è il testo dopo i due punti; togli gli spazi prima di convertire.
Suggerimento 3
Usa un intero a 64 bit e restituisci 0 per un oggetto vuoto.
Complessità attesa
tempo O(lunghezza del testo), spazio aggiuntivo O(1)
Riferimenti
Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.