# Algorithms question ## Question We define the `edit_distance` function on two strings to be the minimum number of substitutions, additions and removals of characters to get from the first string to the second. For example - `edit_distance("hello", "hallo") == 1` - `edit_distance("hi", "hey") == 2` - `edit_distance("ab", "ba") == 2` - `edit_distance("xhello world", "hello world") == 1` - `edit_distance("hello world", "xhello world") == 1` - `edit_distance("hello world", "hello x world") == 2` - `edit_distance("hello worldx", "xhello world") == 2` - `edit_distance("abc", "") == 3` Describe an algorithm for computing the `edit_distance` function. ## Solution ```rust fn edit_distance(s1: String, s2: String) -> int { let scores = [][]; for s1_index, s1_char in s1.chars().enumerate() { for s2_index, s2_char in s2.chars().enumerate() { let substitution = scores[s1_index - 1][s2_index - 1]; let substituion_score = if s1_char == s2_char { substitution } else { substitution + 1 }; let deletion_score = scores[s1_index - 1][s2_index]; let insertion_score = scores[s1_index][s2_index - 1]; let score = min(substition_score, deleteion_score, insertion_score); scores[s1_index][s2_index] = score; } } scores[s1_len][s2_len]; } ```