const calculateTypo = (str) => {
const n = str.length;
if (n % 2 !== 0) return 0;
let balance = 0;
for (let i = 0; i < n; i++) {
if (str[i] === "(") balance++;
else balance--;
}
if (Math.abs(balance) !== 2) return 0;
if (str[0] === ")") {
let temp = 1;
for (let i = 1; i < n; i++) {
if (str[i] === "(") {
temp++;
} else {
temp--;
}
if (temp < 0) return 0;
}
return temp === 0 ? 1 : 0;
}
if (str[n - 1] === "(") {
let temp = 1;
for (let i = n - 2; i >= 0; i--) {
if (str[i] === ")") {
temp++;
} else {
temp--;
}
if (temp < 0) return 0;
}
return temp === 0 ? 1 : 0;
}
let result = 0;
if (balance === 2) {
let temp = 0;
for (let i = 0; i < n; i++) {
if (str[i] === "(") {
temp++;
if (temp >= 2) result++;
} else {
temp--;
}
if (temp < 0) return 0;
}
} else {
let temp = 0;
for (let i = n - 1; i >= 0; i--) {
if (str[i] === ")") {
temp++;
if (temp >= 2) result++;
} else {
temp--;
}
if (temp < 0) return 0;
}
}
return result;
};
console.log(calculateTypo("()(())))")); // Expected: 4
console.log(calculateTypo("((()")); // Expected: 2
console.log(calculateTypo(")()(()))")); // Expected: 1
console.log(calculateTypo(")())")); // Expected: 1
console.log(calculateTypo(")()()(()))")); // Expected: 1
console.log(calculateTypo("(()()(())(")); // Expected: 1
console.log(calculateTypo("()(((())")); // Expected: 3
console.log(calculateTypo("(()())))")); // Expected: 4
console.log(">>>>> Zero results <<<<<<");
console.log(calculateTypo("(()))()")); // Expected: 0
console.log(calculateTypo("))((")); // Expected: 0
console.log(calculateTypo("(())")); // Expected: 0
console.log(calculateTypo(")()")); // Expected: 0
console.log(calculateTypo("(()")); // Expected: 0
console.log(calculateTypo("))(()")); // Expected: 0
console.log(calculateTypo("(()())")); // Expected: 0
console.log(calculateTypo("(")); // Expected: 0
console.log(calculateTypo("")); // Expected: 0
console.log(calculateTypo("((((")); // Expected: 0
console.log(calculateTypo("))))")); // Expected: 0