In [1]:
def find_nonrepeative(string):
    if not string:
        return None
    for i, char in enumerate(string):
        repeated = False
        for k, char2 in enumerate(string):
            if i != k and char == char2:
                repeated = True
                break
        if not repeated:
            return char

def find_nonrepeative_python_way(string):
    if not string:
        return None
    for char in string:
        if string.count(char) == 1:
            return char

def find_nonrepeative_hash(string):
    if not string:
        return None
    
    counter = [0] * 256  # each letter will be represetned with its ASCII
    for char in string:
        counter[ord(char)] += 1
    for char in string:
        if counter[ord(char)] == 1:
            return char

In [ ]:


In [ ]:
find_nonrepeative_hash("sealames")

In [ ]:
from nose.tools import assert_equal


def testWith(func):
    assert_equal(func("selam"), "s")
    assert_equal(func("selasm"), "e")
    assert_equal(func("aa"), None)
    assert_equal(func("aab"), "b")
    assert_equal(func("b"), "b")
    assert_equal(func("ackmdbmkca"), "d")
    assert_equal(func(""), None)
    assert_equal(func(None), None)
    assert_equal(func("baaaab"), None)
testWith(find_nonrepeative_python_way)
testWith(find_nonrepeative)

In [3]:
import timeit
print "find_nonrepeative_hash", timeit.timeit(
    "find_nonrepeative_hash('hakfeackmdbmkcahakf')",
    "from __main__ import find_nonrepeative_hash", number=900000)
print "find_nonrepeative_python_way", timeit.timeit(
    "find_nonrepeative_python_way('hakfeackmdbmkcahakf')",
    "from __main__ import find_nonrepeative_python_way", number=900000)
print "find_nonrepeative", timeit.timeit(
    "find_nonrepeative('hakfeackmdbmkcahakf')",
    "from __main__ import find_nonrepeative", number=900000)


find_nonrepeative_hash 3.78166294098
find_nonrepeative_python_way 1.26318311691
find_nonrepeative 6.08177089691

In [ ]: