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