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()]; }