fork download
  1. const fs = require("fs");
  2.  
  3. const s = fs.readFileSync(0, "utf8").trim();
  4. const n = s.length;
  5.  
  6. const balance = new Array(n + 1).fill(0);
  7. for (let i = 0; i < n; i++) {
  8. balance[i + 1] = balance[i] + (s[i] === "(" ? 1 : -1);
  9. }
  10.  
  11. const total = balance[n];
  12.  
  13. const minPrefix = new Array(n + 1);
  14. minPrefix[0] = balance[0];
  15. for (let i = 1; i <= n; i++) {
  16. minPrefix[i] = Math.min(minPrefix[i - 1], balance[i]);
  17. }
  18.  
  19. const minSuffix = new Array(n + 1);
  20. minSuffix[n] = balance[n];
  21. for (let i = n - 1; i >= 0; i--) {
  22. minSuffix[i] = Math.min(minSuffix[i + 1], balance[i]);
  23. }
  24.  
  25. let ans = 0;
  26.  
  27. for (let i = 0; i < n; i++) {
  28. if (minPrefix[i] < 0) continue;
  29.  
  30. if (s[i] === "(") {
  31. if (total === 2 && minSuffix[i + 1] - 2 >= 0) ans++;
  32. } else {
  33. if (total === -2 && minSuffix[i + 1] + 2 >= 0) ans++;
  34. }
  35. }
  36.  
  37. console.log(ans);
  38.  
Success #stdin #stdout 0.05s 40768KB
stdin
()(())))
stdout
4