1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
public class { int dp[][]; public int getStringSimilar(String s1, String s2) { int n, m; int i, j; n = s1.length(); m = s2.length(); if (n == 0 || m == 0) { return Math.abs(m - n); } dp = new int[n][m]; for (i = 0; i < n; i++) dp[i][0] = 1 + i; for (i = 0; i < m; i++) dp[0][i] = 1 + i; for (i = 0; i < n; i++) for (j = 0; j < m; j++) if (s1.charAt(i) == s2.charAt(j)) dp[i][j] = getDP(i - 1, j - 1); else dp[i][j] = min(getDP(i - 1, j), getDP(i, j - 1), getDP(i-1, j - 1)) + 1; return dp[n - 1][m - 1]; } private int min(int a, int b, int c) { return Math.min(Math.min(a, b),c); } int getDP(int i, int j) { if (i <0 && j <0) return 0; if(i<0) return j+1; if(j<0) return i+1; else return dp[i][j]; } public static int getStringDistance(String s1, String s2) { StringDistance obj = new StringDistance(); return obj.getStringSimilar(s1, s2); } public void testGetStringSimilar(){ assertEquals(3,getStringSimilar("kitten", "sitting")); } }
|
近期评论