    :post [(string? %)]}
   (.replaceAll (.toString s) "[ \t\n\r]+" " "))
 
-(defn- ^Long levenshtein-distance
+(defn- levenshtein-distance
   [s1 s2]
   (let [subsolutions (atom {})
         subsolution (fn [i j]

(defn ^String center
  "Pad both ends of s with padding, or spaces, until the length of s
  matches width."
  ([^CharSequence s ^Long width]
   (center s width " "))
  ([^CharSequence s ^Long width ^CharSequence padding]
   {:pre [(not-empty padding)
          (not (nil? s))]
    :post [(= (.length %) width)]}

                         1))))))
    (subsolution (.length s1) (.length s2))))

(defn- hamming-distance [s1 s2]
  (+
   (reduce + (map #(if (= %1 %2) 0 1) s1 s2))
   (- (max (.length s1) (.length s2))
