161. One Edit Distance

编辑距离:两个字符串仅通过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. 

posted @ 2016-06-28 08:47  warmland  阅读(111)  评论(0编辑  收藏  举报