20. 有效的括号
给定一个只包括'('
,')'
,'{'
,'}'
,'['
,']'
的字符串s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例:
js
输入:s = "()[]{}"
输出:true
解题思路
由于“后遇到的左括号要先闭合”,可以用“后进先出”的栈来解决:
- 遇左括号时,将左括号放入栈顶
- 遇右括号时,取出栈顶的左括号,判断它们是否是相同类型的括号
- 如果不是相同的类型,或者栈中并没有左括号,那么字符串无效
动画演示
判断结果:
栈: []
([{}[]])
参考答案
ts
function isValid(s: string): boolean {
const hash = { ')': '(', ']': '[', '}': '{' };
const stack = [];
for (const w of s) {
if (hash[w]) {
const top = stack.pop();
if (top === undefined || top !== hash[w]) return false;
} else {
// 左括号放入栈顶
stack.push(w);
}
}
return stack.length === 0;
}