Encontre com eficiência caracteres repetidos em uma string

Eu sei que a eficiência desse código não é ideal (especialmente com entradas gigantes) e sei que existe uma maneira de alterar esse algoritmo para lidar com outros tipos de dados e não apenas uma repetição em uma string (obviamente existem apenas muitos caracteres para pesquisar).

Existe alguma maneira de aumentar a eficiência aqui?

Tentei usar um dicionário e a função continuava retornando 'none'; tentei uma lista e as coisas deram certo.

Agradeço antecipadamente a quem puder me ajudar!

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')  

agora com um dicionário .... (ele continua imprimindo 'none' no console)

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')