题目描述
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例
示例1:
输入: s = "()"
输出: true
示例2:
输入: s = "()[]{}"
输出: true
示例3:
输入: s = "(]"
输出: false
示例4:
输入: s = "([)]"
输出: false
示例5:
输入: s = "{[]}"
输出: true
提示:
1 <= s.length <= 104s仅由括号'()[]{}'组成
JavaScript实现
/**
* @param {string} s
* @return {boolean}
*/
// 遇到左括号就入栈;
// 遇到右括号,看看是否与前一个匹配,如果不匹配就代表不合法
var isValid = function(s) {
let arr = [];
let obj = {
')':'(',
']':'[',
'}':'{',
}
for(let i=0; i < s.length; i++) {
switch (s[i]){
case '(':
case '[':
case '{': arr.push(s[i]); break;
case ')':
// if (!arr.length || arr[arr.length - 1] != '(') return false;
// arr.pop(); //匹配上就出栈
// break;
case ']':
// if (!arr.length || arr[arr.length - 1] != '[') return false;
// arr.pop(); //匹配上就出栈
// break;
case '}':
// if (!arr.length || arr[arr.length - 1] != '{') return false;
// arr.pop(); //匹配上就出栈
// break;
if(!arr.length || obj[s[i]] != arr[arr.length - 1]) return false;
arr.pop(); break;
}
}
return arr.length == 0
};