Untitled

 avatar
unknown
javascript
2 years ago
1.1 kB
5
Indexable
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]))
    })