fn main() { println!("{}", levenshtein_distance("kitten", "sitting")); println!("{}", levenshtein_distance("saturday", "sunday")); println!("{}", levenshtein_distance("rosettacode", "raisethysword")); } fn levenshtein_distance(word1: &str, word2: &str) -> usize { let w1 = word1.chars().collect::>(); let w2 = word2.chars().collect::>(); let word1_length = w1.len() + 1; let word2_length = w2.len() + 1; let mut matrix = vec![vec![0]]; for i in 1..word1_length { matrix[0].push(i); } for j in 1..word2_length { matrix.push(vec![j]); } for j in 1..word2_length { for i in 1..word1_length { let x: usize = if w1[i-1] == w2[j-1] { matrix[j-1][i-1] } else { 1 + std::cmp::min( std::cmp::min(matrix[j][i-1], matrix[j-1][i]) , matrix[j-1][i-1]) }; matrix[j].push(x); } } matrix[word2_length-1][word1_length-1] }