码迷,mamicode.com
首页 > 其他好文 > 详细

161. One Edit Distance

时间:2016-06-28 09:21:44      阅读:145      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!