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)
In [ ]: