标签:
编辑距离:两个字符串仅通过1.替换一个字母 2.删/增一个字母 变成另外一个字符串所需要的最小的步骤数
状态转移方程是:
1. if(s[i] == t[j])
res[i][j] = res[i-1][j-1];
2. else
res[i][j] = res[i-1][j-1], res[i-1][j], res[i][j-1]中最小的那个数+1
1 public boolean isOneEditDistance(String s, String t) { 2 if(s == null || t == null) { 3 return false; 4 } 5 return editDistance(s, t) == 1; 6 } 7 8 private int editDistance(String s, String t) { 9 int lenS = s.length(); 10 int lenT = t.length(); 11 if(lenS == 0) { 12 return lenT; 13 } else if(lenT == 0){ 14 return lenS; 15 } 16 int[][] res = new int[lenS][lenT]; 17 res[0][0] = s.charAt(0) == t.charAt(0) ? 0: 1; 18 for(int i = 1; i < lenS; i++) { 19 res[i][0] = res[i-1][0] + (s.charAt(i) == t.charAt(0) ? 0: 1); 20 } 21 for(int i = 1; i < lenT; i++) { 22 res[0][i] = res[0][i-1] + (s.charAt(0) == t.charAt(i)? 0: 1); 23 } 24 for(int i = 1; i < lenS; i++) { 25 for(int j = 1; j < lenT; j++) { 26 if(s.charAt(i) == t.charAt(j)) { 27 res[i][j] = res[i-1][j-1]; 28 } else { 29 res[i][j] = Math.min(Math.min(res[i-1][j-1], res[i-1][j]), res[i][j-1]) + 1; 30 } 31 } 32 } 33 return res[lenS - 1][lenT - 1]; 34 }
但是其实这个方法会超时,可是是个通用的做法
2.
标签:
原文地址:http://www.cnblogs.com/warmland/p/5622178.html