题目:
给定一个只包括
'(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例1:
输入:s = "()"
输出:true
示例2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([])"
输出:true
示例 5:
输入:s = "([)]"
输出:false
解析:
这道题的本质是考察对栈的使用,我们要明白栈的性质:后进先出
我们首先将字符串遍历,遍历的同时,使用switch判断当前字符是否属于括号类型的左部分,是的话,就直接在栈中推入当前括号类型的右部分.
如果不是的话,就直接将当前字符与栈最上层的元素进行对比,不能形成正确闭合关系的话直接返回false
直到将字符串遍历完成后,最后判断栈的长度是否为0
具体代码:
javascript
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
const stack = []
for(let i = 0;i<s.length;i++){
let c = s[i]
switch(c){
case '(':
stack.push(')')
break
case '[':
stack.push(']')
break
case '{':
stack.push('}')
break
default:
if(c !== stack.pop()){
return false
}
}
}
return stack.length === 0
};