# 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("xhello world", "hello worldx") == 2` - `edit_distance("abc", "") == 3` Describe an algorithm for computing the `edit_distance` function. ## Solution ```rust fn edit_distance_dp(s1: &str, s2: &str, i1: usize, i2: usize) -> { // We exhausted all of our characters if i1 >= s1.len() && i2 >= s2.len() { return 0; } // We exhausted all characters of the first string, which means to reach the // end string, we need to add all the remaining characters of the second string // to our first string else if i1 >= s1.len() { let remaining = s2.len() - i2; return remaining; } // We exhausted all characters of the second string, which means to reach the // end string, we need to REMOVE all the remaining characters of the first string // from our first string else if i2 >= s2.len() { let remaining = s1.len() - i1; return remaining; } let c1 = s1[i1]; let c2 = s2[i2]; if c1 != c2 { let dist_add = edit_distance_dp(s1, s2, i1 + 1, i2); let dist_substitute = edit_distance_dp(s1, s2, i1 + 1, i2 + 1, new_cost); let dist_remove = edit_distance_dp(s1, s2, i1, i2 + 1, new_cost); return std::iter::from(dist_add, dist_sub, dist_remove).min() + 1; } else { return edit_distance_dp(s1, s2, i1 + 1, i2 + 1, distance); } } fn edit_distance(s1: &str, s2: &str) -> usize { } ```
{"title":"Algorithms question","description":"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.","contributors":"[{\"id\":\"51fa6852-a2e4-4a76-985d-06c703ceb918\",\"add\":642,\"del\":57},{\"id\":null,\"add\":0,\"del\":47}]"}
Expand menu