LeetCode 20 有效的括号

82 阅读1分钟

参加了 kkb 的门徒培训,想要记录下自己的成长过程。每天一篇,坚持不断更 --- 2022.3.20

题目描述

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

有效字符串需满足:

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

 

示例 1:

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

示例 2:

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

示例 3:

输入: s = "(]"
输出: false

示例 4:

输入: s = "([)]"
输出: false

示例 5:

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

 

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

解题思路

利用栈的方法。

/**
 * 比较函数
 * @param {string} p 
 * @param {string} q 
 */
const matched = (p, q) => {
    if (p === '(' && q === ')') return true;
    else if (p === '[' && q === ']') return true;
    else if (p === "{" && q === "}") return true;
    return false
}

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    // 判断是否为长度偶数
    if (s.length & 1) return false;

    // 存放 '([{'
    const ret = []

    for (let str of s) {
        if (str === '(' || str === '[' || str === '{') {
            ret.push(str)
        }
        else {
            if (!ret.length || !matched(ret.pop(), str)) {
                return false;
            }
        }
    }
    return !ret.length;
};