TOPIC

5% Wrong answer

a284 asked 4 months ago

Não sei o que dá errado.

include include

using namespace std;

int main()

{

int i = 0;

string texto;

while (getline(cin, texto)){

    for (i = 0; i < texto.length(); i++){

        if (texto[i] == ' '){

            if (texto[i+1] == '.' || texto[i+1] == ','){

                int j = i;

                while (j < texto.length()){

                    texto[j] = texto[j+1];

                   j++;
                }

            }

        }

    }

    cout << texto <<endl;

}

return 0;

}

This topic was solved and cannot recieve new replies.

  • Tarcísio Mazur Junior replied 4 months ago

    Seu algoritmo imprime caracteres extras (lixo) no final da string texto, afinal, você deslocou para à esquerda porém a string continua contendo a quandidade de caracteres lidas inicialmente. Você pode tratar isso de algumas formas, utilizando substr(), pop_back(), erase().

    Obs.: Seu algoritmo tem complexidade de pior caso de O(n²). Ou seja, uma entrada na ordem de 100000 pode gerar TLE. É possível fazê-lo em tempo linear O(n).

    Outra dica é que strings possuem funções nativas de remoção no meio: texto.erase(texto.begin()+N) sendo 0 <= N < texto.size(). Poupa implementação porém continua ineficiente.

    MOD