|
| 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