From 788a95fae929caa848cdd18584166180b782b9ec Mon Sep 17 00:00:00 2001 From: nickap <49733176+nickap@users.noreply.github.com> Date: Wed, 8 Mar 2023 19:41:26 +0200 Subject: [PATCH 1/2] Create: 1888-minimum-number-of-flips-to-make-the-binary-string-alternating.js --- ...s-to-make-the-binary-string-alternating.js | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 javascript/1888-minimum-number-of-flips-to-make-the-binary-string-alternating.js diff --git a/javascript/1888-minimum-number-of-flips-to-make-the-binary-string-alternating.js b/javascript/1888-minimum-number-of-flips-to-make-the-binary-string-alternating.js new file mode 100644 index 000000000..e416ac62d --- /dev/null +++ b/javascript/1888-minimum-number-of-flips-to-make-the-binary-string-alternating.js @@ -0,0 +1,36 @@ +/** + * https://leetcode.com/problems/minimum-number-of-flips-to-make-the-binary-string-alternating/ + * Time O(n), Space O(1) + * @param {string} s + * @return {number} + */ +var minFlips = (s) => { + if (!s || s.length < 1) return 0; + + const initialLen = s.length; + if (initialLen % 2 === 1) s += s; + + let evenCmp = 0; + let oddCmp = 0; + let result = Infinity; + let end = 0; + let start = 0; + + while (end < s.length) { + if (end % 2 !== Number(s[end])) evenCmp++; + if ((end % 2 ^ 1) !== Number(s[end])) oddCmp++; + + if (end >= initialLen) { + if (start % 2 !== Number(s[start])) evenCmp--; + if ((start % 2 ^ 1) !== Number(s[start])) oddCmp--; + start++; + } + + if (end >= initialLen - 1) { + result = Math.min(evenCmp, oddCmp, result); + } + end++; + } + + return result; +}; From d9f208b3f873fc2df00df4f0e3e96c4e28bbea34 Mon Sep 17 00:00:00 2001 From: nickap <49733176+nickap@users.noreply.github.com> Date: Wed, 8 Mar 2023 19:41:43 +0200 Subject: [PATCH 2/2] Create: 1888-minimum-number-of-flips-to-make-the-binary-string-alternating.ts --- ...s-to-make-the-binary-string-alternating.ts | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 typescript/1888-minimum-number-of-flips-to-make-the-binary-string-alternating.ts diff --git a/typescript/1888-minimum-number-of-flips-to-make-the-binary-string-alternating.ts b/typescript/1888-minimum-number-of-flips-to-make-the-binary-string-alternating.ts new file mode 100644 index 000000000..98ea0e6c9 --- /dev/null +++ b/typescript/1888-minimum-number-of-flips-to-make-the-binary-string-alternating.ts @@ -0,0 +1,30 @@ +function minFlips(s: string): number { + if (!s || s.length < 1) return 0; + + const initialLen = s.length; + if (initialLen % 2 === 1) s += s; + + let evenCmp = 0; + let oddCmp = 0; + let result = Infinity; + let end = 0; + let start = 0; + + while (end < s.length) { + if (end % 2 !== Number(s[end])) evenCmp++; + if ((end % 2 ^ 1) !== Number(s[end])) oddCmp++; + + if (end >= initialLen) { + if (start % 2 !== Number(s[start])) evenCmp--; + if ((start % 2 ^ 1) !== Number(s[start])) oddCmp--; + start++; + } + + if (end >= initialLen - 1) { + result = Math.min(evenCmp, oddCmp, result); + } + end++; + } + + return result; +}