fork download
  1. const calculateTypo = (str) => {
  2. const n = str.length;
  3. if (n % 2 !== 0) return 0;
  4.  
  5. let balance = 0;
  6. for (let i = 0; i < n; i++) {
  7. if (str[i] === "(") balance++;
  8. else balance--;
  9. }
  10.  
  11. if (Math.abs(balance) !== 2) return 0;
  12.  
  13. if (str[0] === ")") {
  14. let temp = 1;
  15. for (let i = 1; i < n; i++) {
  16. if (str[i] === "(") {
  17. temp++;
  18. } else {
  19. temp--;
  20. }
  21. if (temp < 0) return 0;
  22. }
  23. return temp === 0 ? 1 : 0;
  24. }
  25. if (str[n - 1] === "(") {
  26. let temp = 1;
  27. for (let i = n - 2; i >= 0; i--) {
  28. if (str[i] === ")") {
  29. temp++;
  30. } else {
  31. temp--;
  32. }
  33. if (temp < 0) return 0;
  34. }
  35. return temp === 0 ? 1 : 0;
  36. }
  37.  
  38. let result = 0;
  39. if (balance === 2) {
  40. let temp = 0;
  41. for (let i = 0; i < n; i++) {
  42. if (str[i] === "(") {
  43. temp++;
  44. if (temp >= 2) result++;
  45. } else {
  46. temp--;
  47. }
  48. if (temp < 0) return 0;
  49. }
  50. } else {
  51. let temp = 0;
  52. for (let i = n - 1; i >= 0; i--) {
  53. if (str[i] === ")") {
  54. temp++;
  55. if (temp >= 2) result++;
  56. } else {
  57. temp--;
  58. }
  59. if (temp < 0) return 0;
  60. }
  61. }
  62. return result;
  63. };
  64.  
  65. console.log(calculateTypo("()(())))")); // Expected: 4
  66. console.log(calculateTypo("((()")); // Expected: 2
  67. console.log(calculateTypo(")()(()))")); // Expected: 1
  68. console.log(calculateTypo(")())")); // Expected: 1
  69. console.log(calculateTypo(")()()(()))")); // Expected: 1
  70. console.log(calculateTypo("(()()(())(")); // Expected: 1
  71. console.log(calculateTypo("()(((())")); // Expected: 3
  72. console.log(calculateTypo("(()())))")); // Expected: 4
  73. console.log(">>>>> Zero results <<<<<<");
  74. console.log(calculateTypo("(()))()")); // Expected: 0
  75. console.log(calculateTypo("))((")); // Expected: 0
  76. console.log(calculateTypo("(())")); // Expected: 0
  77. console.log(calculateTypo(")()")); // Expected: 0
  78. console.log(calculateTypo("(()")); // Expected: 0
  79. console.log(calculateTypo("))(()")); // Expected: 0
  80. console.log(calculateTypo("(()())")); // Expected: 0
  81. console.log(calculateTypo("(")); // Expected: 0
  82. console.log(calculateTypo("")); // Expected: 0
  83. console.log(calculateTypo("((((")); // Expected: 0
  84. console.log(calculateTypo("))))")); // Expected: 0
  85.  
Success #stdin #stdout 0.05s 18868KB
stdin
Standard input is empty
stdout
4
2
1
1
1
1
3
4
>>>>> Zero results <<<<<<
0
0
0
0
0
0
0
0
0
0
0