5
var makeLargestSpecial = function (S) {13
let arr = S.split("").map((x) => Number.parseInt(x)),14
num = Number.parseInt(S, 2),16
for (let firstEndIndex = 1; firstEndIndex < S.length - 2; firstEndIndex++) {17
for (let lLength = 2; lLength < firstEndIndex + 2; lLength += 2) {18
let firstStartIndex = firstEndIndex - lLength + 1;19
if (!isSpecial(firstStartIndex, firstEndIndex)) continue;22
rLength < S.length - firstEndIndex;25
let secondStartIndex = firstEndIndex + 1,26
secondEndIndex = firstEndIndex + rLength;27
if (!isSpecial(secondStartIndex, secondEndIndex)) continue;29
...arr.slice(0, firstStartIndex),30
...arr.slice(secondStartIndex, secondEndIndex + 1),31
...arr.slice(firstStartIndex, firstEndIndex + 1),32
...arr.slice(secondEndIndex + 1),34
let newNum = Number.parseInt(str, 2);44
function isSpecial(start, end) {46
for (let i = start; i <= end; i++) {47
t += arr[i] == 1 ? 1 : -1;48
if (t < 0) return false; // this is the second rule, really bad description50
return t == 0 ? true : false;55
// console.log(makeLargestSpecial("101101011000"))