def levenshteinDistance(str1, str2):
small = str1 if len(str1) < len(str2) else str2
big = str1 if len(str1) >= len(str2) else str2
even_edits = [x for x in range(len(small) + 1)]
odd_edits = [None for x in range(len(small) + 1)]
for row in range(1, len(big) + 1):
i = row
if row % 2 == 1:
current_edits = odd_edits
previous_edits = even_edits
else:
current_edits = even_edits
previous_edits = odd_edits
current_edits[0] = i
for col in range(1, len(small) + 1):
j = col
if big[i - 1] == small[j - 1]:
current_edits[col] = previous_edits[col - 1]
else:
current_edits[col] = 1 + min(current_edits[col - 1], previous_edits[col - 1], previous_edits[col])
return even_edits[-1] if len(big) % 2 == 0 else odd_edits[-1]