Espada se refiere a la oferta58. Orden de palabras inverso

Ingrese una oración en inglés e invierta el orden de las palabras en la oración, pero el orden de los caracteres dentro de la palabra no cambia. Para simplificar, los signos de puntuación se tratan como letras ordinarias. Por ejemplo, ingrese la cadena de caracteres "Soy un estudiante", luego escriba "estudiante. A soy yo".

  • Los caracteres sin espacios forman una palabra.
  • La cadena de entrada puede contener espacios adicionales antes o después, pero los caracteres invertidos no se pueden incluir.
  • Si hay espacios adicionales entre las dos palabras, reduzca los espacios entre las palabras después de la inversión a solo una.
Solución de clase {
 public :
     string reverseWords ( string s) { 
        reverse (s.begin (), s.end ()); 
        int idx = 0 , n = s.size ();
         for ( int i = 0 ; i <n ; ++ i) {
             if (s [i]! = '  ' ) {
                 // idx registra la posición donde termina la última palabra
                 // si no es la primera palabra, inserte un espacio entre las dos palabras 
                if (idx! = 0 ) s [idx ++] = '  ' ;
                 // índice del comienzo de la nueva palabra en la cadena original j 
                intj = i;
                 // La palabra debe moverse hacia la izquierda como un todo, cubriendo el espacio adicional entre dos palabras 
                mientras que (j <n && s [j]! = '  ' ) { 
                    s [idx ++] = s [j ++ ]; 
                } 
                // Voltear la palabra actual del s 
                invertido actualizado (s.begin () + idx- (j-i), s.begin () + idx); 
                i = j; 
            } 
        } 
        // Eliminar todo después de la última palabra Espacio 
        s.erase (s.begin () + idx, s.end ());
         return s; 
    } 
};

 

Supongo que te gusta

Origin www.cnblogs.com/betaa/p/12671027.html
Recomendado
Clasificación