Edit Distance

Dynamic Programming

C++ Code

This algorithm calculates the minimum edit distance between two strings, represented by a and b. The algorithm uses dynamic programming to recursively solve the problem by breaking it down into smaller subproblems.

Time & Space Complexity: O(mn), where m is the number of characters in the first string and and n is the number of characters in the second string

            vector<vector<int>> mem;

            int minimumEditDistance(string &a, string &b, int i, int j)
            {
                if (mem.at(i).at(j) != -1)
                {
                    return mem.at(i).at(j);
                }
                if (a.length() - i == 0 || b.length() - j == 0)
                {
                    int answer = max(a.length() - i, b.length() - j);
                    mem.at(i).at(j) = answer;
                    return answer;
                }
                if (a[i] == b[j])
                {
                    int answer = minimumEditDistance(a, b, i + 1, j + 1);
                    mem.at(i).at(j) = answer;
                    return answer;
                }
                else
                {
                    int answer = min(1 + minimumEditDistance(a, b, i + 1, j + 1), 1 + minimumEditDistance(a, b, i, j + 1));
                    answer = min(answer, 1 + minimumEditDistance(a, b, i + 1, j));
                    mem.at(i).at(j) = answer;
                    return answer;
                }
            }

            int minDistance(string word1, string word2)
            {
                if (word1.length() > word2.length())
                {
                    vector<int> temp(word1.length() + 1, -1);
                    mem.resize(word1.length() + 1, temp);
                    return minimumEditDistance(word2, word1, 0, 0);
                }
                vector<int> temp(word2.length() + 1, -1);
                mem.resize(word2.length() + 1, temp);
                return minimumEditDistance(word1, word2, 0, 0);
            }