1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution { public: int helper(vector< vector<int> >&dp, string word1, string word2, int i, int j){ if(dp[i][j] != -1) return dp[i][j]; if(word1[i] == word2[j]) return dp[i][j] = helper(dp,word1, word2, i+1, j+1);
return dp[i][j] = min({helper(dp,word1, word2, i+1, j+1), helper(dp,word1, word2, i+1, j), helper(dp,word1, word2, i, j+1)}) + 1; } int minDistance(string word1, string word2) { vector< vector<int> >dp(word1.size() + 1, vector<int>(word2.size() + 1, -1)); for(int i = 0; i <= word1.size(); i++){ dp[i][word2.size()] = word1.size() - i; } for(int j = 0; j <= word2.size(); j++){ dp[word1.size()][j] = word2.size() - j; } return helper(dp, word1, word2, 0, 0); } };
|