题目描述
给定一个只包括 '(',')','{','}','[',']'
的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例
示例1:
输入: "()"
输出: true
示例2:
输入: "()[]{}"
输出: true
示例3:
输入: "([)]"
输出: false
示例4:
输入: "{[]}"
输出: true
思路
- 遍历
s
- 当遇到
[
,(
,{
这些括号的时候就入栈。 - 当遇到
]
,)
,}
这些括号的时候就出栈,出栈 判断与当前s[i]
是否匹配为闭合的括号, 即是否是一对。出栈(
, 当前s[i]
为)
则为一对
代码
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
let length = s.length;
// 做优化,看了答案后添加
if(length % 2 == 1) {
return false;
}
// 建立字典,
let map = {
"{": "}",
"(": ")",
"[": "]",
}
let inqueue = ["{", "(", "["];
let stack = [];
for(let i = 0; i < s.length; i++) {
const current = s[i];
// 判断以下是否属于开合 的括号
if(inqueue.includes(current)) {
stack.unshift(current);
continue;
}
// 出栈, 判断当前出栈的括号是否跟 s[i] 为一对,
let pop = stack.shift();
if(current !== map[pop]) {
return false
}
}
// 最后判断以下栈里面还有没有数据,有的话那就代表还有没有匹配的括号
return stack.length == 0 ;
};