Skip to content

Commit 98f2276

Browse files
Added Edit Distance Algorithm in Dynamic-Programming (#402)
* DP Edit Distance Algorithm * Update EditDistance.js Co-authored-by: vinayak <[email protected]>
1 parent 162fb8d commit 98f2276

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

Dynamic-Programming/EditDistance.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/*
2+
Wikipedia -> https://en.wikipedia.org/wiki/Edit_distance
3+
4+
Q. -> Given two strings `word1` and `word2`. You can perform these operations on any of the string to make both strings similar.
5+
- Insert
6+
- Remove
7+
- Replace
8+
Find the minimum operation cost required to make both same. Each operation cost is 1.
9+
10+
Algorithm details ->
11+
time complexity - O(n*m)
12+
space complexity - O(n*m)
13+
*/
14+
15+
const minimumEditDistance = (word1, word2) => {
16+
const n = word1.length
17+
const m = word2.length
18+
const dp = new Array(m + 1).fill(0).map(item => [])
19+
20+
/*
21+
fill dp matrix with default values -
22+
- first row is filled considering no elements in word2.
23+
- first column filled considering no elements in word1.
24+
*/
25+
26+
for (let i = 0; i < n + 1; i++) {
27+
dp[0][i] = i
28+
}
29+
30+
for (let i = 0; i < m + 1; i++) {
31+
dp[i][0] = i
32+
}
33+
34+
/*
35+
indexing is 1 based for dp matrix as we defined some known values at first row and first column/
36+
*/
37+
38+
for (let i = 1; i < m + 1; i++) {
39+
for (let j = 1; j < n + 1; j++) {
40+
const letter1 = word1[j - 1]
41+
const letter2 = word2[i - 1]
42+
43+
if (letter1 === letter2) {
44+
dp[i][j] = dp[i - 1][j - 1]
45+
} else {
46+
dp[i][j] = Math.min(dp[i - 1][j], dp[i - 1][j - 1], dp[i][j - 1]) + 1
47+
}
48+
}
49+
}
50+
51+
return dp[m][n]
52+
}
53+
54+
const main = () => {
55+
console.log(minimumEditDistance('horse', 'ros'))
56+
console.log(minimumEditDistance('cat', 'cut'))
57+
console.log(minimumEditDistance('', 'abc'))
58+
console.log(minimumEditDistance('google', 'glgool'))
59+
}
60+
61+
main()

0 commit comments

Comments
 (0)