Valid Parentheses - LeetCode

----- Условие ----- Проверить валидность скобок в строке: для каждой открывающей скобки в строке должна быть аналогичная закрывающая в определенном положении (с сохранением порядка).

‘[](){}’ - true, ‘[]{([])}’ - true, ‘]’ - false, ‘[{]}’ - false, ‘[](){’ - false.

----- Решение ----- Для решения необходимо пройтись в цикле по всей строке: если символ является открывающей скобкой, то он добавляется в стек, иначе (когда символ закрывающая скобка) из стека извлекается последний элемент и проверяется на соответствие ‘открывающая-закрывающая скобки’ с текущим. Стек позволяет хранить упорядоченные открывающие скобки, которые удаляются, когда встречаются соответствующие закрывающие.

Отдельные случаи: * если скобка закрывающая, а стек пустой, то соответствия этой скобке нет, вернуть false; * если цикл пройден, а стек не пустой, то есть скобки без соответствия, вернуть false.

Сложность по памяти O(n), так как каждый элемент строки может быть добавлен в стек, сложность по времени O(n).

----- Код ----- /**  * @param {string} s  * @return {boolean}  */ const isValid = function(s) {   const dict = {     ‘}’: ‘{’,     ‘]’: ‘[’,     ‘)’: ‘(’,   };

const openingBrackets = Object.values(dict);   const stack = [];

for (const char of s) {     if (openingBrackets.includes(char)) {       stack.push(char);     } else {       if (!stack.length) return false;         if (stack.pop() !== dict[char]) return false;     }   }

return !stack.length; };