Encuentra eficientemente caracteres repetidos en una cadena

Sé que la eficiencia de este código no es óptima (especialmente con entradas gigantescas), y sé que hay una manera de cambiar este algoritmo para manejar otros tipos de datos y no solo una repetición en una cadena (obviamente solo hay muchos personajes para buscar).

¿Hay alguna forma de aumentar la eficiencia aquí?

Intenté usar un diccionario y la función seguía devolviendo 'none', así que probé una lista y las cosas funcionaron bien.

Gracias de antemano a cualquiera que pueda ayudarme.

def find_repeater(string):
    my_list = []
    my_list.append(string[0])

    for i in range (1, len(string)):

        if string[i] in my_list:
            print 'repetition found'
            return (string[i])

        else:
            my_list.append(string[i])

print find_repeater('abca')  

ahora con un diccionario ... (sigue imprimiendo 'ninguno' en la consola)

def find_repeater(string):
    my_dict = {}
    my_dict[0] = string[0]

    for i in range (1, len(string)):

        if string[i] in my_dict:
            print 'repetition found'
            return string[i]

        else:
            my_dict[i] = string[i]

print find_repeater('abca')  

Respuestas a la pregunta(7)

Su respuesta a la pregunta