From f4ade90f40bb7961e794d20131362727bb923859 Mon Sep 17 00:00:00 2001 From: Anna Matveev Date: Fri, 19 Jan 2018 12:58:51 +0200 Subject: [PATCH] Update oneAway.js A shorter solution to this problem --- chapter01/1.5 - OneAway/oneAway.js | 79 ++++++------------------------ 1 file changed, 15 insertions(+), 64 deletions(-) diff --git a/chapter01/1.5 - OneAway/oneAway.js b/chapter01/1.5 - OneAway/oneAway.js index 1e66a89..effab34 100644 --- a/chapter01/1.5 - OneAway/oneAway.js +++ b/chapter01/1.5 - OneAway/oneAway.js @@ -1,64 +1,15 @@ -var oneAway = function(string1, string2) { - // insert a char for str1 -> remove a char for str2 - var checkOneMissing = function(first, second) { - if (first.length !== second.length - 1) { - return false; - } else { - var mulligan = false; - var fP = 0; // first Pointer - var sP = 0; // second Pointer - while (fP < first.length) { - if (first[fP] !== second[sP]) { - if (mulligan) { - return false; - } else { - mulligan = true; - sP++; // second length is longer - } - } else { - fP++; - sP++; - } - } - return true; - } - }; - - var checkOneDiff = function(first, second) { - if (first.length !== second.length) { - return false; - } else { - var mulligan = false; - var fP = 0; // first Pointer - var sP = 0; // second Pointer - while (fP < first.length) { - if (first[fP] !== second[sP]) { - if (mulligan) { - return false; // more than one mismatch - } else { - mulligan = true; // use up mulligan - } - } - fP++; - sP++; - } - return true; - } - }; - // insert a char for str1 -> remove a char for str2 - // check one diff - - // console log checks - // console.log(string1, string2, 'checkMiss', checkOneMissing(string1, string2)); - // console.log(string2, string1, 'checkMiss', checkOneMissing(string2, string1)); - // console.log(string1, string2, 'checkDiff', checkOneDiff(string1, string2)); - - return checkOneMissing(string1, string2) || checkOneMissing(string2, string1) || checkOneDiff(string1, string2); -}; - - -// Test -console.log(oneAway('pale', 'ple'), true); -console.log(oneAway('pales', 'pale'), true); -console.log(oneAway('pale', 'bale'), true); -console.log(oneAway('pale', 'bake'), false); \ No newline at end of file +function oneAway(str1, str2) { + let arr1 = str1.split(''); + let arr2 = str2.split(''); + let diff = 0, p1 = 0, p2 = 0; + + while (p1 < arr1.length && p2 < arr2.length && diff <= 1) { + let isEqual = arr1[p1] === arr2[p2]; + p1 += isEqual || arr1.length >= arr2.length; + p2 += isEqual || arr2.length >= arr1.length; + diff += !isEqual; + } + + return diff <= 1; + +}