给定一个只包括
'('
,')'
,'{'
,'}'
,'['
,']'
的字符串s
,判断字符串是否有效。有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。
解法 栈辅助
思路
如果遇到左括号,我们就将其入栈,因为后续还是可以添加其他的字符。
如果遇到右括号,我们需要看看栈顶的字符是不是相应的左括号,如果不是,那说明不是有效的括号。
代码
function isValid(s: string): boolean {
if (s.length % 2 !== 0) {
return false;
}
const stack = [];
const rtMap = {
'}': '{',
']': '[',
')': '('
};
for (let char of s) {
if (rtMap[char]) {
if (stack[stack.length - 1] !== rtMap[char]) {
return false;
} else {
stack.pop();
}
} else {
stack.push(char);
}
}
return stack.length === 0;
};
时空复杂度
时间复杂度:O(n)
空间复杂度:O(n)