Ejercicio cadena

# Nos piden una función que nos diga si una cadena
# tiene letras repetidas consecutivas.
#
# Ejemplos:
# letras_repetidas("hola") -> False
# letras_repetidas("sevilla") -> True
#
# En "sevilla" hay dos letras "l" seguidas.


cadena = "hola"

# Así NO funciona:
#
# for letra in cadena:
#
# Porque con este tipo de recorrido solo tenemos
# la letra actual, pero no sabemos fácilmente
# cuál es la siguiente letra para compararla.


# ---------------------------------------------------
# PRIMERA SOLUCIÓN
# ---------------------------------------------------
# Recorremos la cadena usando posiciones (índices)
# para poder comparar una letra con la siguiente.


def letras_repetidas(cadena):

    # len(cadena) nos dice cuántas letras tiene la cadena.
    #
    # range(len(cadena)-1) genera números desde 0
    # hasta la penúltima posición.
    #
    # Restamos 1 porque vamos a usar i+1 y no queremos
    # salirnos del tamaño de la cadena.

    for i in range(len(cadena) - 1):

        # cadena[i]      -> letra actual
        # cadena[i + 1]  -> letra siguiente

        if cadena[i] == cadena[i + 1]:

            # Si encontramos dos letras iguales seguidas,
            # devolvemos True inmediatamente.
            return True

    # Si termina el bucle y no encontramos letras repetidas,
    # devolvemos False.
    return False


print(letras_repetidas("hola"))      # False
print(letras_repetidas("sevilla"))   # True
print(letras_repetidas("bliss"))     # True


# ---------------------------------------------------
# SEGUNDA SOLUCIÓN
# ---------------------------------------------------
# En vez de usar posiciones, guardamos la letra anterior
# y la comparamos con la actual.


def letras_repetidas2(cadena):

    # Variable donde guardaremos la letra anterior.
    # Al principio está vacía porque todavía no hemos
    # recorrido ninguna letra.
    anterior = ""

    # Recorremos la cadena letra por letra.
    for letra in cadena:

        # Comparamos la letra actual con la anterior.
        if letra == anterior:

            # Si son iguales, hay letras repetidas consecutivas.
            return True

        # Guardamos la letra actual como "anterior"
        # para la siguiente vuelta del bucle.
        anterior = letra

    # Si terminamos el recorrido sin encontrar repeticiones,
    # devolvemos False.
    return False


print(letras_repetidas2("hola"))      # False
print(letras_repetidas2("sevilla"))   # True
print(letras_repetidas2("bliss"))     # True

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos