思路
这题很适合用栈,遍历字符串,遇到左括号入栈,遇到右括号检查栈顶元素和该右括号是否匹配,不匹配直接返回失败,匹配继续往下遍历,最后栈为空则是有效的括号字符串。
Js没有栈这种类型,所以用array或者string来模拟都行。
代码
function isValid(s: string): boolean {
// 单数一定不匹配
if (s.length % 2) return false;
const stack = [];
const bracketMap = new Map();
bracketMap.set(')', '(');
bracketMap.set(']', '[');
bracketMap.set('}', '{');
for (let i = 0; i < s.length; i++) {
const cur = s[i];
if (!bracketMap.has(cur)) {
// 左括号
stack.push(cur);
} else {
const topChar = stack[stack.length - 1];
if (bracketMap.get(cur) !== topChar) return false;
else {
s.slice(0, -1);
stack.pop();
}
}
}
return !stack.length;
}
const str = "()";
console.log(isValid(str));