给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true 示例 2:
输入:s = "()[]{}" 输出:true 示例 3:
输入:s = "(]" 输出:false
提示:
1 <= s.length <= 104 s 仅由括号 '()[]{}' 组成
来源:力扣(LeetCode) 链接:leetcode.cn/problems/va… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目思路
- 使用 Stack 进行有效的配对操作
- 遍历字符串,每次遇到左括号则入栈,遇到右括号则应有 栈顶端的 左括号与之对应,若存在不对应的情况则不符合条件
- 当遍历完字符串后,正确情况下,stack应为空,否则则代表有括号没有对应的闭合
- 若字符串长度小于等于1或为基数时,代表条件不符合
示例代码
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
var stack = [];
// 边际场景为一个元素或空字符串
if (s.length <= 1) return false;
for(var i = 0; i < s.length; i++) {
var c = s[i];
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else {
var temp = stack.pop();
switch(c) {
case ')' :
if (temp !== '(')
return false;
else break;
case ']' :
if (temp !== '[')
return false;
else break;
case '}' :
if (temp !== '{')
return false;
else break;
}
}
}
// 程序运行结束,stack内应不存在任何元素
return stack.length == 0;
};