20.1 核心思路
- 遍历输入字符串
- 如果当前字符为左半边括号时,则将其压入栈中
- 如果遇到右半边括号时
- 与左半边括号对应,则取出栈顶元素,继续循环
- 若此时栈为空,则直接返回false
- 若不为对应的左半边括号,反之返回false
20.2 代码块
/*
* @lc app=leetcode.cn id=20 lang=javascript
*
* [20] 有效的括号
*/
// @lc code=start
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function (s) {
// 定义一个空数组
const stack = [];
// 遍历输入的字符串
for (let i = 0; i < s.length; i++) {
// charAt(i) 从一个字符串中返回指定的字符
// 得到字符串的每一个字符
let choice = s.charAt(i);
switch (choice) {
// 遇到左边的括号 就入栈
case "(":
case "[":
case "{":
stack.push(choice);
break;
// 遇到右边的括号 就弹栈并对比
case ")":
if (stack.pop() !== "(")
return false;
break;
case "}":
if (stack.pop() !== "{")
return false;
break;
case "]":
if (stack.pop() !== "[")
return false;
break;
}
}
return stack.length === 0;
};
console.log(isValid("{([])}"));
// @lc code=end