代码改变世界

leetcode - Edit Distance

2013-04-11 12:49  张汉生  阅读(150)  评论(0编辑  收藏  举报

题目描述:点击此处

这道题错在delete之后return cur[len2], 在我的机器上内存还没有及时释放,结果仍然是对的,但是提交之后会有两个测试过不了,这种错误少犯,太折磨人了。

 1 class Solution {
 2 public:
 3   int minDistance(string word1, string word2) {
 4     // Start typing your C/C++ solution below
 5     // DO NOT write int main() function
 6     int len1 = word1.length();
 7     int len2 = word2.length();
 8     int i, j;
 9     if (len1==0 || len2==0)
10       return len1>len2? len1:len2;
11     int * last = new int[len2+1];
12     int * cur = new int[len2+1];
13     for (j=0; j<=len2; j++){
14       last[j] = j;
15       cur[j] = j;
16     }
17     for (i=1; i<=len1; i++){
18       cur[0] = i;
19       for (j=1; j<=len2; j++){
20         int min = 1000000000;
21         if (word1.at(i-1) == word2.at(j-1)){
22           if (min >last[j-1])
23             min = last[j-1];
24         }
25         if (min >last[j]+1)
26           min = last[j]+1;
27         if (min > cur[j-1]+1)
28           min = cur[j-1] + 1;
29         if (min > last[j-1]+1)
30           min = last[j-1]+1;
31         cur[j] = min;
32       }
33       for (j=0; j<=len2; j++)
34         last[j] = cur[j];
35     }
36     int rlt = cur[len2];
37     delete []last;
38     delete []cur;
39     return rlt;
40   }
41 };