给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:输入:s = "()"
输出:true
示例 2:输入:s = "()[]{}"
输出:true
示例 3:输入:s = "(]"
输出:false
示例 4:输入:s = "([)]"
输出:false
示例 5:输入:s = "{[]}"
输出:true
提示:1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
先贴上代码:
s = "(])"
var isValid = function (s) {
var arr = s.split('')
let arrs = []
let count = true
arr.forEach(item => {
switch (item) {
case '(':
arrs.unshift(')')
break;
case '[':
arrs.unshift(']')
break;
case '{':
arrs.unshift('}')
break;
default:
if (item == arrs[0]) {
arrs.shift()
} else if (arrs.length === 0 || arrs[0] !== item) {
count = false
}
break;
}
})
return arrs.length == 0 && count
};
console.log(isValid(s));
-
说一下思路就是遇到左括号就把它对应的右括号压入栈(数组的unshift模拟)中。如果遇到其它的右括号就判断item是不是和栈顶元素相等,如果相等就shift出栈。
-
如果空栈的话就判断栈顶和item是不是相等不相等的话就把count置为false(因为不能直接return false;所以需要一个信号量count)
-
最后再判断栈的长度是否为0和count做“与”运算返回结果即可。