20、有效的括号
题目:20、给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
分析题目
1、每个左括号都要有与之匹配的右括号,那么可以用栈道的思想,将左括号的字符推进栈内,再比较下一个字符是否为对应的右括号;如果下一个字符是对应的,那么就把已经推进栈道的字符推出,最后长度为0时,即可return true;如果不匹配,则false;
代码
var isValid = function(s){
//定义一个栈道stack
var stack = [ ];
for (let i= 0;i<s.length;i++){
//遍历循环,获取单个括号字段
const start = s[i];
if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
//符合要求,推进栈道
stack.push(s[i]);
}else{
//获取下一个栈道元素
const end = stack[stack.length - 1]
if(start == ')' && end== '(' ||
start == ']' && end== '[' ||
start == '}' && end== '{'
){
//end匹配成功,则把栈道的左括号推出
stack.pop()
}else{
//匹配不成功,返回false
return false
}
}
//当stack的长度为0,则true
return stack.length == 0
}