Revertir Palabras de una Cadena - LeetCode 151


Descripción

Dada una cadena s, revierte el orden de sus palabras.

Una palabra está definida como una secuencia de caracteres que no sean espacio. Las palabras en s están separadas por al menos un espacio.

Devuelve una cadena de palabras en order inverso, concatenadas por un solo espacio.

Nota que s puede contener espacios al inicio o al final, o múltiples espacios entre cada par de palabras. La cadena devuelta debe tener un solo espacio separando las palabras. No incluyas ningún otro espacio extra.

Ejemplo 1

Entrada: s = "the sky is blue"
Salida: "blue is sky the"

Ejemplo 2:

Entrada: s = "  hello world  "
Salida: "world hello"
Explicación: La cadena revertida no debe contener los espacios del inicio ni del final.

Ejemplo 3:

Entrada: s = "a good   example"
Salida: "example good a"
Explicación: En la cadena invertida, los espacios múltiples que se encuentran entre algún par de palabras se deben reducir a un solo espacio.

Límites:

  • 1 <= s.length <= 104
  • s contiene letras del alfabeto Inglés (mayúsculas y mińusculas), digitos, y espacios (’ ’).
  • s contiene al menos una palabra.

Solución (desarrollada en Live)

Las soluciones desarrolladas en el Live no son óptimas. Es recomendable consultar las soluciones oficiales de LeetCode

Mostrar solución
class Solution:
    def reverseWords(self, s: str) -> str:
        # La idea es detectar las palabras entre cualquier cantidad de espacios
        # colocar las palabras en una lista y devolver la lista invertida

        lista_palabras = []
        en_palabra = False
        palabra_actual = ''
        # recorrer la cadena y tener marcadores de inicio y fin de palabra
        for c in s:
            # saltar espacios
            if not en_palabra and c == ' ':
                continue

            # comenzar palabra
            if not en_palabra and not c == ' ':
                en_palabra = True
                palabra_actual += c
                continue

            # formar palabra (agregar letras consecutivas)
            if en_palabra and not c == ' ':
                palabra_actual += c
                continue

            # agregar palabra terminada a lista de palabras
            if en_palabra and c == ' ':
                lista_palabras.append(palabra_actual)
                en_palabra = False
                palabra_actual = ''
                continue

        # procesar última palabra detectada en el ciclo
        if len(palabra_actual) > 0:
            lista_palabras.append(palabra_actual)

        lista_palabras.reverse()
        return ' '.join(lista_palabras)

Solución en Google Colab Probar Solución

-

Live Resolviendo el Ejercicio

Fuente del ejercicio: https://leetcode.com/problems/reverse-words-in-a-string/description/?envType=study-plan-v2&envId=leetcode-75