Solución al Ejercicio: Comprimir cadena
📋 Copiar código
def comprimir_cadena(cadena):
"""
Comprime una cadena contando las repeticiones consecutivas de caracteres.
Args:
cadena: La cadena de entrada.
Returns:
La cadena comprimida si es más corta que la original, o la cadena
original en caso contrario.
"""
if not cadena:
return ""
cadena_comprimida = ""
caracter_actual = cadena[0]
contador = 1
for i in range(1, len(cadena)):
if cadena[i] == caracter_actual:
contador += 1
else:
cadena_comprimida += caracter_actual + str(contador)
caracter_actual = cadena[i]
contador = 1
# Agregar el último carácter y su conteo
cadena_comprimida += caracter_actual + str(contador)
return cadena_comprimida if len(cadena_comprimida) < len(cadena) else cadena
# Ejemplos de uso
cadena1 = "aaabbcdddaaa"
comprimida1 = comprimir_cadena(cadena1)
print(f"'{cadena1}' comprimida es: '{comprimida1}'")
cadena2 = "abc"
comprimida2 = comprimir_cadena(cadena2)
print(f"'{cadena2}' comprimida es: '{comprimida2}'")
cadena3 = "aabbccddeeff"
comprimida3 = comprimir_cadena(cadena3)
print(f"'{cadena3}' comprimida es: '{comprimida3}'")
cadena4 = "a"
comprimida4 = comprimir_cadena(cadena4)
print(f"'{cadena4}' comprimida es: '{comprimida4}'")
cadena5 = ""
comprimida5 = comprimir_cadena(cadena5)
print(f"'{cadena5}' comprimida es: '{comprimida5}'")
Explicación del Código:
-
Definición de la función
comprimir_cadena(cadena)
:
- Se define una función llamada
comprimir_cadena
que toma una cadena cadena
como
argumento.
-
Manejo de cadena vacía:
if not cadena: return ""
: Si
la cadena de entrada está vacía, se devuelve una cadena vacía.
-
Inicialización de variables:
cadena_comprimida = ""
: Se
inicializa una cadena vacía para almacenar la versión comprimida.
caracter_actual = cadena[0]
:
Se establece el primer carácter de la cadena como el
caracter_actual
para comenzar el conteo.
contador = 1
: Se inicializa
el contador de repeticiones en 1 (para el primer carácter).
-
Iteración a través de la cadena (a
partir del segundo carácter):
- Se itera a través de la cadena
cadena
desde el segundo carácter (índice 1) hasta el final.
-
Conteo de caracteres consecutivos:
if cadena[i] == caracter_actual:
:
Si el carácter actual (cadena[i]
) es el mismo que el
caracter_actual
, se incrementa el contador
.
else:
: Si el carácter actual
es diferente del caracter_actual
:
cadena_comprimida +=
caracter_actual + str(contador)
: Se añade el
caracter_actual
y su contador
(convertido a
cadena) a la cadena_comprimida
.
caracter_actual = cadena[i]
:
Se actualiza el caracter_actual
al nuevo carácter.
contador = 1
: Se
reinicia el contador
a 1 para el nuevo carácter.
-
Agregar el último carácter y su
conteo:
- Después del bucle, queda el último
carácter y su conteo sin agregar a
cadena_comprimida
. Se
añade al final: cadena_comprimida += caracter_actual +
str(contador)
.
-
Comparación de longitudes y retorno:
return cadena_comprimida if
len(cadena_comprimida) < len(cadena) else cadena
: Se compara la
longitud de la cadena_comprimida
con la longitud de la
cadena original cadena
.
- Si la cadena comprimida es más corta, se
devuelve la
cadena_comprimida
.
- En caso contrario (si la cadena
comprimida no es más corta o es igual), se devuelve la cadena original
cadena
.
-
Ejemplos de uso:
- Se proporcionan varios ejemplos de
cadenas para probar la función, incluyendo casos donde la compresión es
efectiva, donde no lo es, cadenas de un solo carácter y cadenas vacías.
- Para cada ejemplo, se imprime la cadena
original y su versión comprimida (o la original si la compresión no la
acorta).