前提: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
}
};