有效的括号

150 阅读1分钟
题目描述:

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

有效字符串需满足:

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

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/va…

思路分析:
  • 遇到左括号入栈
  • 遇到右括号则查看栈顶
  • 如果栈顶的左括号和右括号匹配,则弹出栈顶
  • 如果栈顶的左括号和右括号不匹配,则匹配失败
  • 如果栈空则匹配成功,不空则匹配失败

js数组实现

var isValid = function(str){
    var arr = []; // 创建一个空数组模拟栈
    for(let i=0;i<arr.length;i++){
        let item = arr[i];
        if(item === '(' || item === '[' || item === '{'){
            arr.push(item);
        }else if(item === ')'){
            if(arr.length === 0 || arr[arr.length-1] !== '('){
                return false;
            }else{
                arr.pop()
            }
        }else if(item === '}'){
            if(arr.length === 0 || arr[arr.length-1] !== '{'){
                return false;
            }else{
                arr.pop();
            }
        }else if(item === ']'){
            if(arr.length === 0 || arr[arr.length-1] !== '['){
                return false;
            }else{
                arr.pop();
            }
        }
    }
    return arr.length === 0;
}

使用 实现

function is_ok (str) {
    var _stack = new Stack();
    for(var i=0;i<str.length;i++){
        var item = str[i];
        if(item === '(' || item === '{' || item === '['){
            _stack.push(item)
        }else if(item === ')'){
            if(_stack.isEmpty() || _stack.top() !== '('){
                return false
            }else{
                _stack.pop()
            }
        }else if(item === '}'){
            if(_stack.isEmpty() || _stack.top() !== '{'){
                return false
            }else{
                _stack.pop()
            }
        }else if(item === ']'){
            if(_stack.isEmpty() || _stack.top() !== '['){
                return false
            }else{
                _stack.pop()
            }
        }
    }
    return _stack.size() === 0
}