Problema
Programas frequentemente recebem JSON como {"apples": 3, "pears": 5}. Bibliotecas como System.Text.Json fazem isso para você, mas analisar um caso simples na mão mostra como o formato funciona.
A entrada é um objeto JSON plano: {, depois zero ou mais pares "key": value separados por vírgulas, depois }. As chaves são entre aspas e não contêm aspas, vírgulas ou dois-pontos; os valores são inteiros, possivelmente negativos. Espaços podem aparecer ao redor de qualquer um dos símbolos.
Implemente sum_json_numbers(text).
Input
text: O objeto JSON.
Output
Retorne a soma de todos os valores (0 para um objeto vazio).
Restrições
2 ≤ comprimento do texto ≤ 100,000
No máximo 10,000 pares; cada valor e a soma cabem em um inteiro de 64 bits
Exemplos
Entrada:
text = "{\"apples\": 3, \"pears\": 5}"
Saída esperada:
expected = 8
Entrada:
std::string text = "{\"apples\": 3, \"pears\": 5}";
Saída esperada:
long long expected = 8;
Entrada:
string text = "{\"apples\": 3, \"pears\": 5}";
Saída esperada:
long expected = 8;
Explicação
3 + 5 = 8.
Entrada:
text = "{ \"debt\" : -20 , \"cash\":15 }"
Saída esperada:
expected = -5
Entrada:
std::string text = "{ \"debt\" : -20 , \"cash\":15 }";
Saída esperada:
long long expected = -5;
Entrada:
string text = "{ \"debt\" : -20 , \"cash\":15 }";
Saída esperada:
long expected = -5;
Explicação
Espaços em volta dos símbolos não importam: −20 + 15 = −5.
Como abordar
Tente sozinho primeiro e depois abra uma dica de cada vez.
Dica 1
Remova as chaves e separe os pares pelas vírgulas.
Dica 2
Cada valor é o texto depois dos dois-pontos; remova os espaços antes de converter.
Dica 3
Use um inteiro de 64 bits e retorne 0 para um objeto vazio.
Complexidade esperada
tempo O(comprimento do texto), espaço extra O(1)
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.