-
Notifications
You must be signed in to change notification settings - Fork 37
/
Copy pathEdit Distance.cpp
33 lines (30 loc) · 931 Bytes
/
Edit Distance.cpp
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
/*
Given two strings word1 and word2, return the minimum number of operations required to convert word1 to word2.
You have the following three operations permitted on a word:
Insert a character
Delete a character
Replace a character
*/
class Solution {
public:
int minDistance(string word1, string word2) {
int m = word1.size(), n = word2.size();
vector<int> pre(n + 1, 0), cur(n + 1, 0);
for (int j = 1; j <= n; j++) {
pre[j] = j;
}
for (int i = 1; i <= m; i++) {
cur[0] = i;
for (int j = 1; j <= n; j++) {
if (word1[i - 1] == word2[j - 1]) {
cur[j] = pre[j - 1];
} else {
cur[j] = min(pre[j - 1], min(cur[j - 1], pre[j])) + 1;
}
}
fill(pre.begin(), pre.end(), 0);
swap(pre, cur);
}
return pre[n];
}
};