rust_args_parser/
suggest.rs1#[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}