Привет, друг-энтузиаст кода! Сегодня мы собираемся погрузиться в чудесный мир проверки фигурных скобок в JavaScript. Проверка скобок — важная задача в программировании, особенно при работе со сложными структурами данных, такими как массивы и объекты. Итак, без лишних слов, давайте рассмотрим некоторые способы решения этой проблемы!
Метод 1: подход на основе стека
Одним из популярных методов проверки фигурных скобок является использование стека. Идея состоит в том, чтобы поместить открывающие скобки в стек и удалить их при обнаружении закрывающей скобки. Если стек в конце пуст, это означает, что все фигурные скобки сбалансированы.
function validateBraces(str) {
const stack = [];
const openingBraces = ['(', '[', '{'];
const closingBraces = [')', ']', '}'];
for (let i = 0; i < str.length; i++) {
const brace = str[i];
if (openingBraces.includes(brace)) {
stack.push(brace);
} else if (closingBraces.includes(brace)) {
const matchingOpeningBrace = openingBraces[closingBraces.indexOf(brace)];
if (stack.length === 0 || stack.pop() !== matchingOpeningBrace) {
return false;
}
}
}
return stack.length === 0;
}
console.log(validateBraces("{{[()()]}}")); // true
console.log(validateBraces("[()")); // false
Метод 2: регулярные выражения
Регулярные выражения также могут пригодиться для проверки фигурных скобок. Мы можем использовать шаблон регулярного выражения для сопоставления открывающих и закрывающих скобок и подсчета их появления. Если значения совпадают, фигурные скобки сбалансированы.
function validateBraces(str) {
const openingBracesCount = (str.match(/[\{\[\(]/g) || []).length;
const closingBracesCount = (str.match(/[\}\]\)]/g) || []).length;
return openingBracesCount === closingBracesCount;
}
console.log(validateBraces("{{[()()]}}")); // true
console.log(validateBraces("[()")); // false
Метод 3: Рекурсивный подход
В этом методе мы рекурсивно удаляем пары совпадающих фигурных скобок до тех пор, пока скобок не останется. Если последняя строка пуста, это означает, что все фигурные скобки были сбалансированы.
function validateBraces(str) {
const openingBraces = ['(', '[', '{'];
const closingBraces = [')', ']', '}'];
const removeMatchingBraces = (str) => {
let newStr = str;
for (let i = 0; i < openingBraces.length; i++) {
const regex = new RegExp(`\\${openingBraces[i]}\\${closingBraces[i]}`, 'g');
newStr = newStr.replace(regex, '');
}
return newStr;
};
while (str !== (str = removeMatchingBraces(str))) {}
return str.length === 0;
}
console.log(validateBraces("{{[()()]}}")); // true
console.log(validateBraces("[()")); // false
Метод 4: Подсчет
Этот подход предполагает подсчет уровня вложенности фигурных скобок. Мы начинаем с нуля и увеличиваем его для каждой открывающей скобки и уменьшаем для каждой закрывающей скобки. Если счетчик остается положительным на протяжении всего процесса, фигурные скобки сбалансированы.
function validateBraces(str) {
let count = 0;
for (let i = 0; i < str.length; i++) {
if (str[i] === '(' || str[i] === '[' || str[i] === '{') {
count++;
} else if (str[i] === ')' || str[i] === ']' || str[i] === '}') {
count--;
if (count < 0) {
return false;
}
}
}
return count === 0;
}
console.log(validateBraces("{{[()()]}}")); // true
console.log(validateBraces("[()")); // false
Это всего лишь несколько методов проверки фигурных скобок в JavaScript. У каждого подхода есть свои преимущества и недостатки, поэтому выберите тот, который соответствует вашей кодовой базе и требованиям.
В заключение, освоение проверки скобок — важнейший навык для любого разработчика JavaScript. Используя алгоритмы на основе стека, регулярные выражения, рекурсию или методы подсчета, вы можете гарантировать, что ваш код останется надежным и безошибочным.
Так что вперед, изучайте эти методы и используйте возможности сбалансированных фигурных скобок в своем коде!