题解 | #有效括号序列#

有效括号序列

http://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2

描述

给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。

思路:

  • 建立一个对象里面存放符号
  • 之后对字符串进行遍历
  • 如果栈的长度为0,则直接将其压入栈中
  • 如果栈长不为0,则判定其与栈尾的符号是否匹配,匹配则将两个都删除,不匹配则压入
  • 最后判断栈的长度是否为0
function isValid(s) {
    let b = []
    const obj = {
        '[': ']',
        '(': ')',
        '{': '}'
    }
    let arr = s.split('')
    console.log(arr);
    for (let i = 0; i < arr.length; i++) {
        if (b.length == 0) {
            b.push(arr[i])
        } else {
            const a = b.pop()
            if (arr[i] == obj[a]) {
                continue
            } else {
                b.push(a)
                b.push(arr[i])
            }
        }
    }
    if (b.length == 0) {
        return true
    } else {
        return false
    }
}
module.exports = {
    isValid : isValid
};

第二种方法

思路:

  • 使用一个栈来存放符号,如果为( { [ 的其中一个则压入栈中
  • 如果不是的话首先判断栈的长度是否为0(如果为0则会出现这个情况 【‘ } ’】 )
  • 如果栈长不为0,取出栈尾的元素,与其进行判断 是否匹配
function isValid( s ) { 
    const stack = [];
    for(let i = 0; i < s.length; i++){
        let item = s.charAt(i);
        if(item === '(' || item === '{' || item === '['){
            stack.push(item)
        }else{
            if(stack.length === 0) return false
            else{
                let o = stack.pop();
                if(item === ')' && o !== '(') return false
                if(item === '}' && o !== '{') return false
                if(item === ']' && o !== '[') return false
            }
        }
    }
    return stack.length === 0 ? true:false
}
module.exports = {
    isValid : isValid
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务