简单给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = “()”
输出:true
示例 2:
输入:s = “()[]{}”
输出:true
示例 3:
输入:s = “(]”
输出:false
示例 4:
输入:s = “([)]”
输出:false
示例 5:
输入:s = “{[]}”
输出:true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function (s) {
if (s.length < 2 || s.length % 2 === 1) {
return false;
}
const map = {
"(": ")",
"[": "]",
"{": "}",
};
if (s.length === 2) {
if (s[1] === map[s[0]]) {
return true;
}
return false;
}
const stack = [];
for (let i = 0; i < s.length; i++) {
if (stack.length === 0) {
stack.push(s[i]);
continue;
}
if (map[stack[stack.length - 1]] === s[i]) {
stack.pop();
} else {
stack.push(s[i]);
}
}
return stack.length === 0;
};
思路:使用栈
- 根据题意首先排除特殊情况:s.length<2 && s.length % 2 === 1,此时直接返回false;倘若s.length === 2则直接比对两个元素,根据情况返回即可;
- 接下来设定一个空栈stack,根据题意我们可以判断出若该字符串时有效的括号,则必然存在stack(stack.length >= 1 )的最后一位元素与 字符串s 中的某个字符组成一个合法的括号;
- 所以我们只需要不断地进行进栈出栈的行为,最后判断栈的长度是否为0即可。