Задать вопрос
@kiberlain

Как проверить строку на сбалансированность скобок?

есть строка var s = 'foo(bar[baz]){qux}'
Надо проверить что в ней правильно расставлены скобочки. С чего начать?
  • Вопрос задан
  • 16827 просмотров
Подписаться 2 Простой 2 комментария
Ответ пользователя SHVV К ответам на вопрос (4)
SHVV
@SHVV
Ололошки уже три ответа и ни одного правильного.
function isBalanced(str) {
    // пары открывающих-закрывающих скобок
    var br = "(){}[]";
    // стек открытых скобок
    var st = [];
    // бежим по всей строке
    for (var i = 0; i < str.length; ++i) {
        // текущий символ
        var ch = str[i];
        // ищем символ в скобках
        var ind = br.indexOf(ch);
        // если скобка найдена
        if (ind >= 0) {
            // проверяем, какая это скобка
            if (ind & 1) {
                // если закрывающая скобка, проверяем стек
                // стек пуст - плохо
                if (!st.length) return false;
                // извлекаем последнюю открытую скобку из стека
                var last_br = st.pop();
                // если она не соответствует закрывающей скобке - тоже плохо
                if (last_br != br[ind - 1]) return false;
            } else { 
                // открывающую скобку просто пихаем в стек
                st.push(ch);
            }
        }
    }
    // если после обхода всей строки стек пуст - всё ок
    return !st.length;
}

Проверять тут.
Ответ написан