rust_args_parser/
suggest.rs

1#[must_use]
2pub fn levenshtein(a: &str, b: &str) -> usize {
3    let (n, m) = (a.len(), b.len());
4    if n == 0 {
5        return m;
6    }
7    if m == 0 {
8        return n;
9    }
10    let mut prev: Vec<usize> = (0..=m).collect();
11    let mut curr: Vec<usize> = vec![0; m + 1];
12    for (i, ca) in a.chars().enumerate() {
13        curr[0] = i + 1;
14        for (j, cb) in b.chars().enumerate() {
15            let cost = usize::from(ca != cb);
16            curr[j + 1] =
17                core::cmp::min(core::cmp::min(curr[j] + 1, prev[j + 1] + 1), prev[j] + cost);
18        }
19        core::mem::swap(&mut prev, &mut curr);
20    }
21    prev[m]
22}