有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
解题思路
- 遍历字符串s,想要括号一一对应,那么首先这个字符串的长度是偶数的,奇数是无法对应
- 其次,后出现的左括号先闭合,由此我们可以使用栈的形式
- 用一个容器先去储存遇到的左括号,当遇到右括号时,对比于容器中最后一个左括号相对应,那么我们就可以将容器中左括号移除
- 当不能对应时,字符串s不为有效
- 最后当所有字符全部遍历结束后,容器中没有遗留的左括号,此字符串为有效
代码如下
var isValid = function(s) {
const n = s.length;
if (n % 2 === 1) {
return false;
}
const pairs = new Map([
[')', '('],
[']', '['],
['}', '{']
]);
const stk = [];
for (let ch of s){
if (pairs.has(ch)) {
if (!stk.length || stk[stk.length - 1] !== pairs.get(ch)) {
return false;
}
stk.pop();
}
else {
stk.push(ch);
}
};
return !stk.length;
};