Проверка сбалансированных круглых скобок в JavaScript

Чтобы проверить сбалансированность круглых скобок в JavaScript, вы можете использовать несколько методов. Ниже я опишу некоторые из них:

  1. Подход на основе стека. Этот метод предполагает использование структуры данных стека для отслеживания открытия и закрытия скобок. Переберите входную строку и поместите каждую открывающую скобку в стек. При обнаружении закрывающей скобки проверьте, пуст ли стек или является ли верхний элемент стека соответствующей открывающей скобкой. Если да, извлеките верхний элемент из стека. В конце, если стек пуст, скобки сбалансированы.
function checkBalancedParentheses(input) {
  const stack = [];
  const opening = ['(', '[', '{'];
  const closing = [')', ']', '}'];
  for (let i = 0; i < input.length; i++) {
    if (opening.includes(input[i])) {
      stack.push(input[i]);
    } else if (closing.includes(input[i])) {
      const correspondingOpening = opening[closing.indexOf(input[i])];
      if (stack.length === 0 || stack.pop() !== correspondingOpening) {
        return false;
      }
    }
  }
  return stack.length === 0;
}
console.log(checkBalancedParentheses('((a+b) * (c-d))'));   // Output: true
console.log(checkBalancedParentheses('((a+b) * (c-d)))'));  // Output: false
  1. Подход с использованием регулярных выражений. Вы можете использовать регулярные выражения для удаления всех символов, кроме круглых скобок, из входной строки. Затем проверьте, пуста ли полученная строка или нет. Если он пуст, круглые скобки сбалансированы.
function checkBalancedParentheses(input) {
  const regex = /[^\(\)]/g;
  const cleanString = input.replace(regex, '');
  return cleanString.length === 0;
}
console.log(checkBalancedParentheses('((a+b) * (c-d))'));   // Output: true
console.log(checkBalancedParentheses('((a+b) * (c-d)))'));  // Output: false
  1. Подсчет подсчета. Этот метод предполагает подсчет открывающихся и закрывающихся скобок. Выполните итерацию по входной строке и увеличьте счетчик для каждой открывающей скобки и уменьшите его для каждой закрывающей скобки. Если в какой-либо момент значение счетчика становится отрицательным или не равно нулю в конце, круглые скобки не сбалансированы.
function checkBalancedParentheses(input) {
  let count = 0;
  for (let i = 0; i < input.length; i++) {
    if (input[i] === '(') {
      count++;
    } else if (input[i] === ')') {
      count--;
    }
    if (count < 0) {
      return false;
    }
  }
  return count === 0;
}
console.log(checkBalancedParentheses('((a+b) * (c-d))'));   // Output: true
console.log(checkBalancedParentheses('((a+b) * (c-d)))'));  // Output: false