LeetCode之有效的括号

90 阅读1分钟

前提:22/9/1 b站的笔试题根据这道题进行了改编

本文思路如下:

  • leetcode原题解析
  • b站根据此题改编后的题

1.LeetCode原题(通过辅助栈来实现)

代码如下

var isValid = function(s) {
//定义一个映射关系
let map=new Map([[')','('],['}','{'],[']','[']])
//如果括号数为奇数,则肯定是不匹配的
if(s.length%2!==0){
return false
}
//辅助栈
let stack=[]
for(let i=0;i<s.length;i++){
//如果是后半括号,则进行匹配
if(map.has(s[i])){
    if(map.get(s[i])!==stack.pop()){
        return false
    }
}
//如果是前半括号,则进栈
else{
    stack.push(s[i])
}
}
//如果栈不为空,则是不匹配的
return !stack.length
};
}

2.b栈秋招笔试改编题

题目要求:根据给出的括号,判断是否有效,如果无效,返回该添加的括号,以及位置

例子如下:

输入:'(){{}'

输出:'}' 5    //在5的位置缺少了'}'

代码如下:

var isValid = function(s) {
let map=new Map([[')','('],['}','{'],[']','[']])
let map1=new Map([['(',')'],['[',']'],['{','}']])
let stack=[]
for(let i=0;i<s.length;i++){
    if(map.has(s[i])){
        //匹配
        let temp=stack.pop()
        if(temp==undefined){
            let res=`${map.get(s[i])}  ${i}`
            return res
        }
        if(map.get(s[i])!==temp){
            let res=`${map1.get(temp)}  ${i+1}`
            return res
        }
    }
    else{
        stack.push(s[i])
    }
}
if(stack.length){
    let res=`${map1.get(stack[stack.length-1])}  ${s.length+1}`
    return res
}
};