首页 > 其他 > 详细

161. One Edit Distance

时间:2016-06-28 09:19:11      阅读:176      评论:0      收藏:0      [点我收藏+]

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

161. One Edit Distance

原文:http://www.cnblogs.com/warmland/p/5622178.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!