def str_distance(a, b):
 (n, m) = (len(a), len(b))
 if (n > m):
  (a, b) = (b, a)
  (n, m) = (m, n)
 current = range((n + 1))
 for i in range(1, (m + 1)):
  (previous, current) = (current, ([i] + ([0] * n)))
  for j in range(1, (n + 1)):
   (add, delete) = ((previous[j] + 1), (current[(j - 1)] + 1))
   change = previous[(j - 1)]
   if (a[(j - 1)] != b[(i - 1)]):
    change += 1
   current[j] = min(add, delete, change)
 return current[n]

def str_distance ( a , b ) : ( n , m ) = ( len ( a ) , len ( b ) ) if ( n > m ) : ( a , b ) = ( b , a ) ( n , m ) = ( m , n ) current = range ( ( n + 1 ) ) for i in range ( 1 , ( m + 1 ) ) : ( previous , current ) = ( current , ( [ i ] + ( [ 0 ] * n ) ) ) for j in range ( 1 , ( n + 1 ) ) : ( add , delete ) = ( ( previous [ j ] + 1 ) , ( current [ ( j - 1 ) ] + 1 ) ) change = previous [ ( j - 1 ) ] if ( a [ ( j - 1 ) ] != b [ ( i - 1 ) ] ) : change += 1 current [ j ] = min ( add , delete , change ) return current [ n ]
calculates the levenshtein distance between a and b .