Edit Distance

来源:互联网 发布:姚明nba数据统计 编辑:程序博客网 时间:2024/05/11 06:31
    //dp[i][j] = dp[i - 1][j - 1], if(word1.charAt(i - 1) == word2.charAt(j - 1));    //dp[i][j] = min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1, if(word1.charAt(i - 1) != word2.charAt(j - 1));    //dp[i][0] = i; dp[0][j] = j;    public int minDistance(String word1, String word2) {        // Start typing your Java solution below        // DO NOT write main() function        if(word1 == null || word2 == null) return 0;        //pay attention here, the length of the array always one longer than string        int[][] dp = new int[word1.length() + 1][word2.length() + 1];        for(int i = 0; i <= word1.length(); i++) dp[i][0] = i;        for(int j = 0; j <= word2.length(); j++) dp[0][j] = j;        for(int i = 1; i <= word1.length(); i++) {            for(int j = 1; j <= word2.length(); j++) {                if(word1.charAt(i - 1) == word2.charAt(j - 1)) dp[i][j] = dp[i - 1][j - 1];                else dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1])) + 1;            }        }        return dp[word1.length()][word2.length()];    }                //use rotate array to save space    public int minDistance(String word1, String word2) {        // Start typing your Java solution below        // DO NOT write main() function        if(word1 == null || word2 == null) return 0;        int[][] dp = new int[2][word2.length() + 1];        for(int i = 0; i <= word2.length(); i++) dp[0][i] = i;        int flag =0;        for(int i = 1; i <= word1.length(); i++) {            flag = i & 1;            dp[flag][0] = i;            for(int j = 1; j <= word2.length(); j++) {                if(word1.charAt(i - 1) == word2.charAt(j - 1)) dp[flag][j] = dp[flag ^ 1][j - 1];                else dp[flag][j] = Math.min(dp[flag ^ 1][j - 1], Math.min(dp[flag ^ 1][j], dp[flag][j - 1])) + 1;            }        }        return dp[flag][word2.length()];            }

原创粉丝点击