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 (’ ’).
scontiene 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