LeetCode - Edit Distance

Given two words word1 and word2, find the minimum number of operations required to convert word1 to word2.

You have the following 3 operations permitted on a word:

Insert a character
Delete a character
Replace a character
Example 1:

Input: word1 = "horse", word2 = "ros"
Output: 3
Explanation: 
horse -> rorse (replace 'h' with 'r')
rorse -> rose (remove 'r')
rose -> ros (remove 'e')
Example 2:

Input: word1 = "intention", word2 = "execution"
Output: 5
Explanation: 
intention -> inention (remove 't')
inention -> enention (replace 'i' with 'e')
enention -> exention (replace 'n' with 'x')
exention -> exection (replace 'n' with 'c')
exection -> execution (insert 'u')

用recursion 会 TLE:

class Solution {
    public int minDistance(String word1, String word2) {
        if(word1 == null || word2 == null){
            return -1;
        }
        int len1 = word1.length();
        int len2 = word2.length();
        
        if(len1 == 0){
            return len2;
        }
        if(len2 == 0){
            return len1;
        }
        if(word1.charAt(len1-1) == word2.charAt(len2-1)){
            return minDistance(word1.substring(0, len1-1), word2.substring(0, len2-1));
        }
        return 1 + min (minDistance(word1, word2.substring(0, len2-1)),
                        minDistance(word1.substring(0, len1-1), word2),
                        minDistance(word1.substring(0, len1-1), word2.substring(0, len2-1))
                       );
        
    }
    public int min (int x,int y,int z) 
    { 
        if (x <= y && x <= z) return x; 
        if (y <=x && y<=z) return y; 
        else return z; 
    } 
    
    
}

猜你喜欢

转载自www.cnblogs.com/incrediblechangshuo/p/10051608.html