intminDistance(string word1, string word2){ int m = word1.size(); int n = word2.size(); word1_ = word1; word2_ = word2; dp.resize(m, vector<int>(n, -1)); int res = traverse(0, 0); return res; }
inttraverse(int idx1, int idx2){ if (idx2 == word2_.size()) { return word1_.size() - idx1; } if (idx1 == word1_.size()) { return word2_.size() - idx2; } if (dp[idx1][idx2] != -1) { return dp[idx1][idx2]; } int ans = 0; if (word1_[idx1] == word2_[idx2]) { ans = traverse(idx1 + 1, idx2 + 1); } else { ans = min(traverse(idx1 + 1, idx2 + 1), // replacement min(traverse(idx1, idx2 + 1), // insert traverse(idx1 + 1, idx2))) + 1; // delete } dp[idx1][idx2] = ans; return ans; } };