| 46 | // Time O(n + m) |
| 47 | // Space O(max(n + m)) |
| 48 | function oneAway(array1, array2) { |
| 49 | const largerString = array1.length > array2.length ? array1 : array2; |
| 50 | const smallString = array1.length <= array2.length ? array1 : array2; |
| 51 | const frequencies = {}; |
| 52 | let edits = 0; |
| 53 | |
| 54 | if (largerString.length - smallString.length > 1) return false; |
| 55 | |
| 56 | for (let i = 0; i < largerString.length; i++) { |
| 57 | if (frequencies.hasOwnProperty(largerString[i])) { |
| 58 | frequencies[largerString[i]]++; |
| 59 | } else { |
| 60 | frequencies[largerString[i]] = 1; |
| 61 | } |
| 62 | } |
| 63 | |
| 64 | for (let j = 0; j < smallString.length; j++) { |
| 65 | if (frequencies.hasOwnProperty(smallString[j])) { |
| 66 | if (frequencies[smallString[j]] === 0) return false; |
| 67 | frequencies[smallString[j]] -= 1; |
| 68 | } |
| 69 | } |
| 70 | |
| 71 | Object.values(frequencies).forEach((value) => { |
| 72 | edits += value; |
| 73 | }); |
| 74 | |
| 75 | return edits <= 1; |
| 76 | } |
| 77 | |
| 78 | console.log(oneAway("pale", "ple")); |
| 79 | console.log(oneAway("pale", "pales")); |