LeetCode20 有效的括号

91 阅读1分钟

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()" 输出:true 示例 2:

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

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

提示:

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

来源:力扣(LeetCode) 链接:leetcode.cn/problems/va… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目思路

  1. 使用 Stack 进行有效的配对操作
  2. 遍历字符串,每次遇到左括号则入栈,遇到右括号则应有 栈顶端的 左括号与之对应,若存在不对应的情况则不符合条件
  3. 当遍历完字符串后,正确情况下,stack应为空,否则则代表有括号没有对应的闭合
  4. 若字符串长度小于等于1或为基数时,代表条件不符合

示例代码

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    var stack = [];
    // 边际场景为一个元素或空字符串
    if (s.length <= 1) return false;
    for(var i = 0; i < s.length; i++) {
        var c = s[i];
        if (c == '(' || c == '[' || c == '{') {
            stack.push(c);
        } else {
            var temp = stack.pop();
            switch(c) {
                    case ')' :
                        if (temp !== '(')
                            return false;
                        else break;
                    case ']' :
                        if (temp !== '[')
                            return false;
                        else break;
                    case '}' :
                        if (temp !== '{')
                            return false;
                        else break;
                }
            }
        }
    // 程序运行结束,stack内应不存在任何元素  
    return stack.length == 0;
};