Minimum Number of Flips to Make the Binary String Alternating LeetCode solution in JavaScript

1
/**
2
* @param {string} s
3
* @return {number}
4
*/
5
var minFlips = function (s) {
6
let length = s.length - 1;
7
let flipMap = {
8
1: "0",
9
0: "1",
10
};
11
s = s + s;
12
let alt1 = "1";
13
let alt2 = "0";
14
let left = 0;
15
let right = 0;
16
let diff1 = 0;
17
let diff2 = 0;
18
let min = Infinity;
19

20
while (right < s.length) {
21
if (right > 0) {
22
alt1 = flipMap[alt1];
23
alt2 = flipMap[alt2];
24
}
25

26
let current = s[right];
27
if (current !== alt1) diff1++;
28
if (current !== alt2) diff2++;
29
if (right - left === length) {
30
min = Math.min(diff1, diff2, min);
31
if ((length + 1) % 2 === 0) {
32
if (s[left] !== flipMap[alt1]) diff1--;
33
if (s[left] !== flipMap[alt2]) diff2--;
34
} else {
35
if (s[left] !== alt1) diff1--;
36
if (s[left] !== alt2) diff2--;
37
}
38
left++;
39
}
40
right++;
41
}
42
return min;
43
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0