let brackets = ['()', '{}', '[]'];
let openers = new Set();
let closers = new Set();
let mapper = {};
brackets.map(item => {
openers.add(item[0]);
closers.add(item[1]);
mapper[item[0]] = item[1];
mapper[item[1]] = item[0];
})
function isValid(s) {
let toClose = [];
for (let i = 0; i < s.length; i++) {
let char = s.charAt(i);
let isOpener = openers.has(char);
if (isOpener) {
toClose.push(mapper[char]);
} else {
if (!toClose.length) {
return false
}
if (toClose.pop() !== char) {
return false
}
}
}
return toClose.length === 0
}
cases = [
['', true],
['((()))', true],
['([()])', true],
['((]]))', false],
['((]]))', false],
['((]]){)', false],
['{[]([]())}', true],
]
cases.map(item => {
console.log('item', item[0], isValid(item[0]))
})