1. 问题描述
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
2. 解题思路
- s的长度是奇数,不可能闭合,直接判定不合法
- 遇到左括号入栈,遇到同一种类型的右括号出栈,若右括号类型不匹配,则直接判定不合法。
- 最后栈为空就是有效括号
- 类型匹配时
s[i]
为右括号,栈顶元素(数组最后一位)为左括号
3. 解题
var isValid = function(s) {
if(!s && s.length === 0 || s.length % 2 !== 0) return false;
let stack = []; //新建栈
for(let i = 0; i < s.length; i++) {
if(s[i] === '(' || s[i] === '{' || s[i] === '[') {
stack.push(s[i]);
} else {
let stackPopData = stack[stack.length - 1]; //栈顶元素
if(
stackPopData === "(" && s[i] === ")" ||
stackPopData === "{" && s[i] === "}" ||
stackPopData === "[" && s[i] === "]"
){//类型匹配
stack.pop();
} else { //类型不匹配
return false;
}
}
}
return stack.length === 0;
};
//时间复杂度O(n),空间复杂度O(n)
(1) 输出:
问题来源:力扣(LeetCode)
链接: https://leetcode-cn.com/problems/valid-parentheses/submissions/