Использование рекурсии для решения проблемы кодирования со сбалансированными скобками в JavaScript
Я работаю над полным объяснением этого решения, но пока вот решение
Код
function balancedBrackets(string, openArr = []) { let stack = openArr let arr = [] if (typeof string === 'string') { arr = string.split('') } else { arr = string } if (stack.length === 0 && arr.length === 0) { return true } const char = arr.shift() if (char === ')' || char === ']' || char === '}') { if (stack.length === 0) { return false } else { stack.push(char) stack = check(stack) } } if (char === '(' || char === '[' || char === '{') { if (arr.length === 0) { return false } else { stack.push(char) stack = check(stack) } } if (stack === false) { return false } if (stack.length > 0 && arr.length === 0) { return false } else if (balancedBrackets(arr, stack)) { return true } else { return false } } const check = (array) => { const size = array.length if (size > 1) { const prev = array[size-2] const last = array[size-1] if ((prev === '(' && last === ')') || (prev === '[' && last === ']') || (prev === '{' && last === '}')) { return popTwo(array) } else if (last === ')' || last === ']' || last === '}') { return false } } return array } const popTwo = (array) => { array.pop() array.pop() return array }
Это вернет
balancedBrackets('(hello)[world]') // return true balancedBrackets('{}') // true balancedBrackets('[({}{}{})([])]') // true balancedBrackets('(hello') // false balancedBrackets('([)]') // false balancedBrackets(')(') // false