///|
pub fn levenshtein(a : String, b : String) -> Int {
let a_chars = a.to_array()
let b_chars = b.to_array()
let a_len = a_chars.length()
let b_len = b_chars.length()
if a_len == 0 {
return b_len
}
if b_len == 0 {
return a_len
}
let cache = Array::make(b_len, 0)
for j in 0.. Double {
let a_len = a.to_array().length()
let b_len = b.to_array().length()
if a_len == 0 && b_len == 0 {
return 1.0
}
let max_len = if a_len > b_len { a_len } else { b_len }
1.0 - levenshtein(a, b).to_double() / max_len.to_double()
}