26-leetCode: 20. 有效的括号

102 阅读1分钟

题目

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。

示例

输入: s = "()"
输出: true

输入: s = "()[]{}"
输出: true

输入: s = "{[]}"
输出: true

解题思路

本题主要是运用栈的思想,先进后出:让字符串依次进入栈,如果遇到成对的括号,就出栈,最后如果栈中为空,表示有效的括号;这里运用了map作为左右括号的映射,如果最后一个入栈的括号与下一个括号成对则出栈。

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    // 定义栈
    const stack = [];
    // 定义成对的括号map
    const map = {
        '{':'}',
        '(':')',
        '[':']'
    }
    s.split('').forEach(item => {
        const len = stack.length;
        // 如果成对了,则出栈,否则入栈
        if (len && map[stack[len - 1]] === item) {
            stack.pop();
        } else {
            stack.push(item);
        }
    })
    // 栈为空表示有效的括号
    return stack.length === 0;
};