最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励
题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
/**
* @param {string} s
* @return {boolean}
*/
/* 先取出s[i],1.是左括号,入栈;
2.是右括号,2.1若此时栈空,则出错;2.2否则出栈顶元素,并和s[i]匹配,2.2.1若成功,栈顶出栈,2.2.2.否则报错,
3.最后判断栈是否为空 */
var isValid = function(s) {
//字符串s的长度为奇数时,直接返回false
if(s.length%2 ==1) return false ;
//通过数组建立栈
let stack = [];
for(let i = 0;i<s.length;i++){
let c = s[i];
console.log(c)
//如果为左括号就进栈
if(c==='{' || c==='[' || c==='(') {
stack.push(c);
}
else {
//若为右括号,若栈空时,返回一个false;
if(stack.length===0) return false ;
//取到栈顶元素
let s = stack[stack.length-1];
//判断是否匹配,ruo匹配就出栈顶元素,可以不用接收返回结果
if(s==='{'&&c==='}' || s==='['&&c===']' || s=='('&&c==')') {
stack.pop();
}
else{
return false ;
}
}
}
//遍历完所有字符串后,判断栈是否为空,若为空,即完全配对
return stack.length ===0;
};
我是歌谣 放弃很容易 但是坚持一定很酷